繁体   English   中英

如何在Kafka Deserializer中实现反序列化方法?

[英]How to implement deserialize method in Kafka Deserializer?

我正在做我的第一个Apache Kafka使用者。 所以这个例子看起来不错。 https://www.safaribooksonline.com/library/view/kafka-the-definitive/9781491936153/ch04.html我在实施反序列化方法时遇到问题。 假设我在客户中有地址字段。 我想我应该制作AddressDeserializer,但是如何知道AddressDeserializer需要读取多少字节呢? Address可以说3个String字段,但有时其中一些为null。 那我应该传递给它3 * 8字节吗? 我想那不是解决方案。 另外,buffer.get(nameBytes)方法对我来说似乎很不自然,因为in参数同时是out参数,这是一种不好的做法。 这是检索字节的正确方法,还是我丢失了某些东西? 先感谢您。

@Override
  public Customer deserialize(String topic, byte[] data) {

    int id;
    int nameSize;
    String name;

    try {
      if (data == null)
        return null;
      if (data.length < 8)
        throw new SerializationException("Size of data received by IntegerDeserializer is shorter than expected");

      ByteBuffer buffer = ByteBuffer.wrap(data);
      id = buffer.getInt();
      String nameSize = buffer.getInt();

      byte[] nameBytes = new Array[Byte](nameSize);
      buffer.get(nameBytes);
      name = new String(nameBytes, 'UTF-8');

      return new Customer(id, name); 2

    } catch (Exception e) {
      throw new SerializationException("Error when serializing Customer to byte[] " + e);
    }
  }   

在这里,应该使用Jackson库。 ObjectMapper添加为依赖项,然后:

return objectMapper.readValue(data, Customer.class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM