我正在尝试将一个 Protobuf 对象转换为 Avro。我正在使用
//myProto object is deserialized using google protobuf API
ProtobufDatumWriter<MyProto> pbWriter = new ProtobufDatumWriter<MyProto>(MyProto.class);
FileOutputStream fo = new FileOutputStream(args[0]);
Encoder e = EncoderFactory.get().binaryEncoder(fo, null);
pbWriter.write(myProto, e);
fo.flush();
Avro文件已成功创建。如果我使用cat命令查看该文件,可以看到文件中的数据。然而,当我尝试使用avro-tools获取有关已保存的avro文件的模式或元信息时,它显示:
Exception in thread "main" java.io.IOException: Not a data file.
at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:105)
at org.apache.avro.file.DataFileReader.<init>(DataFileReader.java:97)
at org.apache.avro.tool.DataFileGetSchemaTool.run(DataFileGetSchemaTool.java:47)
看一下 Avro 的源代码,这个错误意味着前四个字节与“MAGIC”前四个字节不匹配。我正在尝试查看是否有任何错误。
非常感谢您能给予的任何帮助。