如果你的输入流中由多组定界消息组成,形如下结构:
其中Delimiter是下一个Event的数据长度。
可以直接调用writeDelimitedTo(),传入你的对象即可。protobufs会自己计算出数据长度,写成delimiter。
同样,用parseDelimitedFrom()就可以开箱即用得读取数据,你并不需要关系Delimiter是多少。
下面两者方式一样。parseDelimitedFrom就是parseFrom(CodedInputStream)的一层封装。(Ref: AbstractParser. parsePartialDelimitedFrom(InputStream input, ExtensionRegistryLite extensionRegistry))
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(filePath));
while (true){
EventOuterClass.Event event = EventOuterClass.Event.parseDelimitedFrom(bin);
if (event == null){
break;
}
}
CodedInputStream inputStream = CodedInputStream.newInstance(bin);
while (!inputStream.isAtEnd()) {
int len = inputStream.readRawVarint32();
EventOuterClass.Event event = EventOuterClass.Event.parseFrom(inputStream.readRawBytes(len));
}