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;
}
}
761

被折叠的 条评论
为什么被折叠?



