gpt4 book ai didi

java - Avro - java.io.IOException : Not a data file

转载 作者:行者123 更新时间:2023-11-30 05:36:12 34 4
gpt4 key购买 nike

我正在使用https://github.com/allegro/json-avro-converter将我的 json 消息转换为 avro 文件。调用convertToAvro方法后,我得到一个字节数组:byte[] byteArrayJson。然后我使用 Apache 的 commons 库:

FileUtils.writeByteArrayToFile(myFile.avro, byteArrayJson);

文件已创建。当我尝试将其重新转换为 json 时,使用:

java -jar avro-tools-1.8.1.jar tojson myFile.avro > testCheck.json


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.DataFileStream.<init>(DataFileStream.java:84)
at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:71)
at org.apache.avro.tool.Main.run(Main.java:87)
at org.apache.avro.tool.Main.main(Main.java:76)

我创建了一个 Junit 测试并使用了 ConvertToJson 方法(来自上一个链接)并断言字符串,一切正常。但对于 jar 来说,它不起作用。难道我做错了什么?我使用的是 cmd,而不是 powerShell,因为我在 SO 帖子中看到这可以更改编码。我认为问题出在编码上,但我不知道去哪里找。(我使用Windows作为操作系统)

最佳答案

原因是 avro 文件在通过这两种不同方式生成时不包含相同的数据,这是预期的行为。

作为测试,使用此命令生成 avro 文件

java -jar avro-tools-1.8.2.jar fromjson  --schema-file avroschema.json
testCheck.json > myFile2.auro

现在阅读此内容并用 Java 打印,请注意它不只包含 AVRO RECORD它也包含 scme(至少) - 请参阅下面的字符串转换数据。这意味着使用 acro 工具和使用 avro 转换器生成时 AVRO 文件中的数据是不同的

bjavro.schemaœ{"type":"record","name":"Acme","fields":[{"name":"username","type":"string"}]}avro.c

当您尝试使用 tojson 命令读取转换器生成的 avro 文件时,工具 API 中的验证“失败”。

现在,当使用转换器生成文件时,使用 avro 工具读取“json”的正确命令是 fragtojson。看到我们实际上只读取 JSON 片段(这里是 avro 记录)

java -jar avro-tools-1.8.2.jar fragtojson --schema-file avroschema.json myFile.avro > myFile21.json

这里的另一个想法是完全避免使用 AVRO 工具,并使用转换器作为依赖项创建自己的可执行 jar,并使用它读取 AVRO JSON 记录。

关于java - Avro - java.io.IOException : Not a data file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556144/

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