我需要将一个带有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[]
数组时是否存在任何问题,或者我是否错误地使用它?
答案 0 :(得分:1)
您的问题是生成的反射模式假定数组中的所有对象都是Object类型。 如果您希望它们是Integer,String或Boolean,我不认为您将能够使用反射,而是自己定义模式。 例如,如果你的数组是String,那么将工作。