我正在尝试读取一个文件,其中包含多个分隔消息(数千个),如何使用 Google protobufs正确执行此操作?
这就是我写分隔符的方式:
MyMessage myMessage = MyMessage.parseFrom(byte[] msg);
myMessage.writeDelimitedTo(FileOutputStream);
这就是我读取分隔文件的方式;
CodedInputStream is = CodedInputStream.newInstance(new FileInputStream("/location/to/file"));
while (!is.isAtEnd()) {
int size = is.readRawVarint32();
MyMessage msg = MyMessage.parseFrom(is.readRawBytes(size));
//do stuff with your messages
}
我有点困惑,因为这个问题中接受的答案是使用 .parseDelimitedFrom() 来读取分隔字节;Google Protocol Buffers - 将消息存储到文件中
但是,当使用 .parseDelimitedFrom() 时,它只读取第一条消息。(我不知道如何使用 parseDelimitedFrom() 读取整个文件)。
此评论说使用 CodedOutputStream 编写分隔消息:Google 协议缓冲区 - 将消息存储到文件中(即 writer.writeRawVariant())。我目前正在使用此评论的实现来读取整个文件。writeDelimitedTo() 基本上做同样的事情吗
writer.writeRawVarint32(bytes.length);
和
writer.writeRawBytes(bytes);
另外,如果我的方式不是读取由分隔消息组成的整个文件的正确方式,你能告诉我是什么吗?
谢谢你。