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