java:读取 .pb 文件时,协议消息标签有无效的线路类型错误

问题描述 投票:0回答:1

我尝试读取.pb扩展文件。 具体来说,我想阅读这个数据集(在.tgz中)。

我写了以下代码:

Path path = Paths.get(filename);
byte[] data = Files.readAllBytes(path);
Document document = Document.parseFrom(data);

但是后来我收到以下错误。

com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.

代码的最后一行导致了这个错误,但我不知道如何解决它。

java protocol-buffers
1个回答
4
投票

您的文件实际上采用“分隔”格式:每个文件包含多条消息,每条消息都有一个长度前缀。

InputStream stream = new FileInputStream(filename);
Document document = Document.parseDelimitedFrom(stream);

继续拨打

parseDelimitedFrom(stream)
以阅读更多消息,直到它返回
null
(文件结束)。

另请注意,我查看的文件 -

testNegative.pb
中的
heldout_relations.tgz
- 似乎包含
Relation
的实例,而不是
Document
。确保您正在解析正确的类型,因为 protobuf 实现无法区分差异 - 如果您解析错误的类型,您将得到垃圾。

© www.soinside.com 2019 - 2024. All rights reserved.