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



我试着读取。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.

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

您的文件实际上是"delimited"格式:每个文件包含多个消息,每个消息都有一个长度前缀。

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

继续调用parseDelimitedFrom(stream)以读取更多消息,直到它返回null(文件结束)。

还要注意,我查看的文件——heldout_relations.tgz中的testNegative.pb——似乎包含Relation的实例,而不是Document。请确保解析的类型是正确的,因为protobuf实现无法分辨其中的区别——如果解析错误的类型,将会得到垃圾。

最新更新