2016-07-09 4 views
0

Мне нужно сериализовать объект с Object[] поля в нем в массив байтов, но когда я выполнить следующий код результирующий массив байт пуст:сериализовать объект с массивом в Avro

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

Ваша проблема заключается в том, что отраженная схема, которая сгенерирована, предполагает, что все ваши объекты в массиве имеют тип Object. Если вы хотите, чтобы они были Integer, String или Boolean, я не думаю, что вы сможете использовать отражение, но сами определить схему. Если ваш массив будет из строки, например, он будет работы.

Смежные вопросы