Protobuf文件只读取一些字段

时间:2014-08-07 16:22:18

标签: android protocol-buffers

我有超过50个字段在.proto文件中不断写入,但我的查询是

1)如果我只需要读取10个字段,那么如何才能实现。

2)如果我需要从特定字段读取部分数据,那么我该如何实现。

这应该在不加载.proto文件的所有数据的情况下完成。

感谢您的关注。

1 个答案:

答案 0 :(得分:4)

Protobufs无法实现这一点。从理论上讲,你可以编写一个流式解析器,它可以在不解析整个事件的情况下提取部分消息,但只有当你需要的字段恰好位于消息的前面时才会起作用,因为你在至少必须在你想要的字段之前解析所有内容。在任何情况下,标准protobuf实现都没有提供简单的方法来进行流式解析,因为这不是protobuf设计使用的方式。某些第三方实施(例如upb)可能有所帮助。

另一方面,Cap'n Proto是协议缓冲区的替代方法, 支持从大文件中只读取一个字段,而不必解析之前的字段。它通过将字段置于固定偏移量并利用mmap()来存储大文件来实现此目的。

披露:我是Cap'n Proto和Protocol Buffers v2(由谷歌开源的版本)的作者。