Kafka自定义序列化器

1.序列化器
@Slf4j
@Component
public class SelfSerializer implements Serializer{

@Override
public byte[] serialize(String s, Object o) {
    return BeanUtils.beanToByte(o);
}

@Override
 public byte[] serialize(String s, Object o) {
      //kafka 之前的版本默认利用这个接口方法完成对传输信息的序列化
     return SerializationUtils.serialize((Serializable) o);
  }

@Override
  public byte[] serialize(String topic, Headers headers, Object data) {
     //kafka 现在的版本默认利用这个接口方法完成对传输信息的序列化
      return SerializationUtils.serialize((Serializable) data);
 }

}
2.反序列化器
@Component
public class SelfDeserializer implements Deserializer {

    @Override
    public Object deserialize(String s, byte[] bytes) {
        return BeanUtils.byteToObj(bytes);
    }

  @Override
   public Object deserialize(String s, byte[] bytes) {
       //这个是以前版本使用的接口方法
       return SerializationUtils.deserialize(bytes);
   }

   @Override
      public Object deserialize(String topic, Headers headers, byte[] data) {
          //最新版本序列化都走这里了
          return SerializationUtils.deserialize(data);
      }   

}

3.工具类
public class BeanUtils {

/**
 * 对象序列化为byte数组
 *
 * @param obj
 * @return
 */
public static byte[] beanToByte(Object obj) {
    byte[] bb = null;
    try (ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
         ObjectOutputStream outputStream = new ObjectOutputStream(byteArray)){
        outputStream.writeObject(obj);
        outputStream.flush();
        bb = byteArray.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bb;
}


/**
 * 字节数组转为Object对象
 *
 * @param bytes
 * @return
 */
public static Object byteToObj(byte[] bytes) {
    Object readObject = null;
    try (ByteArrayInputStream in = new ByteArrayInputStream(bytes);
         ObjectInputStream inputStream = new ObjectInputStream(in)){
        readObject = inputStream.readObject();
    } catch (Exception e) {
        e.printStackTrace();
        //反序列化失败,则直接结束程序,保证数据完整
        System.err.println("反序列化对象失败!");
        System.exit(0);
    }
    return readObject;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值