使用以下方法对Java对象进行序列化和反序列化:
static public byte[] asBytes(Test test, Schema schema) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null);
ReflectDatumWriter<Test> writer = new ReflectDatumWriter<Test>(schema);
writer.write(test, encoder);
encoder.flush();
return out.toByteArray();
} finally {
out.close();
}
}
然后从数据库中检索byte [],然后使用以下代码将其转换为java对象:
static public Test asTest(byte[] bytes, Schema schema) throws IOException {
try {
Decoder decoder = DecoderFactory.get().binaryDecoder(bytes, null);
return new ReflectDatumReader<Test>(schema).read(null, decoder);
}
}
“ Test”类具有架构升级(版本2),其中添加了新字段[List]。
使用这种新模式,我将Java对象(测试v2)转换为byte []并存储在DB中。 当我第一次获取此byte []并使用asTest()进行转换时,将填充该类的所有字段。但是,当我第二次获取此byte []时,不会填充新字段。
我已经验证了架构,它看起来还不错。我感到奇怪的是,第一次是在填充数据,而第二次是在丢失数据。
请建议如何调试。谢谢。