反序列化时AVRO缺少数据

时间:2019-09-05 19:31:24

标签: java avro

使用以下方法对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 []时,不会填充新字段。

我已经验证了架构,它看起来还不错。我感到奇怪的是,第一次是在填充数据,而第二次是在丢失数据。

请建议如何调试。谢谢。

0 个答案:

没有答案