tonglin0325的个人主页

avro学习笔记——实现序列化和反序列化

1.使用java语言来实现avro序列化和反序列化#

使用DatumWriter和DatumReader对avro进行序列化和反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static <T> byte[] binarySerializable(T t) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
BinaryEncoder binaryEncoder = EncoderFactory.get().binaryEncoder(out, null);
DatumWriter<T> writer = new SpecificDatumWriter<T>((Class<T>) t.getClass());
try {
writer.write(t, binaryEncoder);
binaryEncoder.flush();
out.flush();
} catch (IOException e) {
LOGGER.error("binary serializable error");
e.printStackTrace();
}
LOGGER.debug("ByteArrayOutputStream = {}", new String(out.toByteArray()));
return out.toByteArray();
}


public static <T> T binaryDeserialize(byte[] bytes, Schema schema) {
try {
BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(bytes, null);
DatumReader<T> datumReader = new SpecificDatumReader<T>(schema);
T read = datumReader.read(null, binaryDecoder);
return read;
} catch (IOException e) {
LOGGER.error("binary deserialize error");
e.printStackTrace();
}
return null;
}

使用Twitter 的 Bijection 类库来实现avro对象的序列化和反序列化

参考:Kafka 中使用 Avro 序列化框架(二):使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化

 

2.使用python语言来实现avro序列化和反序列化#

 

3.使用go语言来实现avro序列化和反序列化#