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

时间:2016-07-04 08:08:40

标签: java protocol-buffers

我尝试读取.pb扩展名文件。 具体来说,我想阅读this dataset(在.tgz中)。

我写下面的代码:

class Strategy(object):

    def __init__(self):
        self.turn_number = 1
        self.moves = []
        self.opponent_moves = []
        self.total_points = 0
        self.opponent_points = 0

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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