我尝试读取.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.
代码的最后一行导致了这个错误,但我不知道如何解决它。
您的文件实际上采用“分隔”格式:每个文件包含多条消息,每条消息都有一个长度前缀。
InputStream stream = new FileInputStream(filename);
Document document = Document.parseDelimitedFrom(stream);
继续拨打
parseDelimitedFrom(stream)
以阅读更多消息,直到它返回null
(文件结束)。
另请注意,我查看的文件 -
testNegative.pb
中的 heldout_relations.tgz
- 似乎包含 Relation
的实例,而不是 Document
。确保您正在解析正确的类型,因为 protobuf 实现无法区分差异 - 如果您解析错误的类型,您将得到垃圾。