Я только начинаю работу с Avro и сталкиваюсь с проблемой генерации тестовых данных для процесса, который хочет прочитать эти данные в виде серии байтов.
Когда я смотрю на серию байтов, которые Я пишу, кажется, что мое первое поле, которое целое число искажается. Байты для 2-го и 3-го полей выглядят нормально.
Допустим, это моя схема avro
{
"type": "record",
"namespace": "com.foo",
"name": "test",
"version": "1",
"fields": [
{"name" : "code", "type" : "int", "default" : 1},
{ "name": "firstName", "type": "string", "doc": "firstName" },
{ "name": "lastName", "type": "string", "doc": "lastName" }
]
}
Вот мой код:
Schema avroSchema =
SchemaBuilder.record("test").namespace("com.foo").
fields().
requiredInt("code").
requiredString("firstName").
requiredString("lastName").endRecord();
GenericRecord avroMessage = new GenericData.Record(avroSchema);
avroMessage.put("code", 7);
avroMessage.put("firstName", "robert");
avroMessage.put("lastName", "wong");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
DatumWriter<Object> datumWriter = new GenericDatumWriter<>(avroSchema);
datumWriter.write(avroMessage, encoder);
encoder.flush();
baos.close();
byte[] data = baos.toByteArray();
Integer code = ByteBuffer.wrap(data).getInt();
System.out.println("code:" + code);
// Result is code:235696751 -- not code:7 as expected.
Любая идея, что Я мог бы делать, что портит первое целочисленное поле?