在Avro中使用数组序列化对象

时间:2016-07-09 07:57:22

标签: java avro

我需要将一个带有Object[]字段的对象序列化为字节数组,但是当我执行以下代码时,结果字节数组为空:

TestObject testObject = new TestObject();

ByteArrayOutputStream out = new ByteArrayOutputStream();
DatumWriter<TestObject> writer = new ReflectDatumWriter<TestObject>(TestObject.class);
final Encoder encoder = EncoderFactory.get().directBinaryEncoder(out, null);

writer.write(testObject, encoder);
out.close();
// This is empty
byte[] res = out.toByteArray();

TestObject的位置:

class TestObject {
    Object[] arr = new Object[] {1, "str", false};
}

如果我用以下代码替换TestObject定义:

class TestObject {
    String str = "str";
}

它工作正常,我看到String字段已成功写入字节数组。

Avro在序列化Object[]数组时是否存在任何问题,或者我是否错误地使用它?

1 个答案:

答案 0 :(得分:1)

您的问题是生成的反射模式假定数组中的所有对象都是Object类型。 如果您希望它们是Integer,String或Boolean,我不认为您将能够使用反射,而是自己定义模式。 例如,如果你的数组是String,那么工作。