Google Protobufs(2) - parseDelimitedFrom vs CodedInputStream

如果你的输入流中由多组定界消息组成,形如下结构:

Google Protobufs(2) - parseDelimitedFrom vs CodedInputStream

 

其中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));
}

 

上一篇:java之xml文件解析


下一篇:java 复制目录(来自tomcat6源代码)