gpt4 book ai didi

java - Avro:ReflectDatumWriter 不输出架构信息

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:07 24 4
gpt4 key购买 nike

请参阅以下示例代码:

        User datum = new User("a123456", "my.email@world.com");
Schema schema = ReflectData.get().getSchema(datum.getClass());
DatumWriter<Object> writer = new ReflectDatumWriter<>(schema);
ByteArrayOutputStream output = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(output, null);
writer.write(datum, encoder);
encoder.flush();
byte[] bytes = output.toByteArray();
System.out.println(new String(bytes));

产生:

a123456$my.email@world.com

我原以为所有 Avro 编写者都会发布架构信息和数据,但事实并非如此。

如果我将 GenericDatumWriterDataFileWriter 结合使用,我可以成功打印架构,但我希望使用 ReflectDatumWriter,因为我不希望自己构建 GenericRecord(我希望库能够执行此操作)

如何将架构序列化?

最佳答案

我自己解决了这个问题,您需要使用 DataFileWriter 因为它包含 create() 方法中写入架构的条目

解决方案是将其与ByteArrayOutputStream结合使用:

        Schema schema = ReflectData.get().getSchema(User.class);
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
ByteArrayOutputStream output = new ByteArrayOutputStream();
dataFileWriter.create(schema, output);
GenericRecord user = createGenericRecord(schema);
dataFileWriter.append(user);
dataFileWriter.close();
byte[] bytes = output.toByteArray();
System.out.println(new String(bytes));

关于java - Avro:ReflectDatumWriter 不输出架构信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com