【发布时间】:2018-04-09 03:47:55
【问题描述】:
我需要通过流来发送我的数据,所以我选择了 Avro 进行数据序列化和反序列化。但是使用 avro 阅读器的现有实现不支持向后兼容。将序列化数据写入文件并从文件中读取支持向后兼容性。在不知道作者架构的情况下,如何实现向后兼容性。我发现了许多与此相关的 stackoverflow 问题。但我没有找到任何解决这个问题的方法。谁能帮我解决这个问题。
以下是我的序列化器和反序列化器方法。
public static byte[] serialize(String json, Schema schema) throws IOException {
GenericDatumWriter<Object> writer = new GenericDatumWriter<>(schema);
ByteArrayOutputStream output = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(output, null);
DatumReader<Object> reader = new GenericDatumReader<>(schema);
Decoder decoder = DecoderFactory.get().jsonDecoder(schema, json);
Object datum = reader.read(null, decoder);
writer.write(datum, encoder);
encoder.flush();
output.flush();
return output.toByteArray();
}
public static String deserialize(byte[] avro, Schema schema) throws IOException {
GenericDatumReader<Object> reader = new GenericDatumReader(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(avro, null);
Object datum = reader.read(null, decoder);
ByteArrayOutputStream output = new ByteArrayOutputStream();
JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, output);
DatumWriter<Object> writer = new GenericDatumWriter(schema);
writer.write(datum, encoder);
encoder.flush();
output.flush();
return new String(output.toByteArray(), "UTF-8");
}
【问题讨论】:
标签: java avro backwards-compatibility