协议缓冲区:从文件中读取所有序列化消息

时间:2016-08-31 14:33:33

标签: java protocol-buffers

我正在尝试序列化和反序列化protobuf消息。按照documentation的示例,我写道:

ByteArrayOutputStream out = new ByteArrayOutputStream(...);
ArrayList<AddressBookProtos.Person> messages = ...;
for (int i = 0; i < messages.size; i++){
  messages.writeTo(out);
  out.flush();
}
out.close();

在阅读消息时,我希望写一下:

ByteArrayInputStream in = new ByteArrayInputStream(...);
ArrayList<AddressBookProtos.Person> messages = new ArrayList<...>();
while (in.available() > 0) {
   messages.add(AddressBookProtos.Person.parseFrom(in));
}

然而,我总是只得到一个结果。其他结果在哪里?

1 个答案:

答案 0 :(得分:3)

您必须使用writeDelimitedTo / parseDelimitedFrom或实施自己的基于分隔符的解决方案。

根据javadoc:

  

...在写入数据之前将消息的大小写为varint。这允许在消息之后将更多数据写入流,而无需自己分隔消息数据。使用MessageLite.Builder.mergeDelimitedFrom(InputStream)(或静态方法YourMessageType.parseDelimitedFrom(InputStream))来解析此方法写入的消息。