我刚刚意识到有一个选项可以更有效地使用 Protocol Buffer 来读取/写入基元数组。我已经有 protobuf 文件,但没有 Packed=true。我的问题是,当我将此选项添加到我的 .proto 并编译它时会发生什么。我是否能够读取之前保存的 protobuf(未使用此选项保存的)?
repeated int32 samples = 4 [packed=true];
最佳答案
从版本 2.3.0(2010 年 1 月)开始,Google 编写的 Protobufs 实现(C++、Java 和 Python)在解析时可以接受任一格式的数据。 packed
设置仅告诉实现在写入时使用哪种格式。请参阅the changelog (v2.3.0 下的第一项)。
版本 2.1(引入打包字段时)和 2.2 没有此属性 - 这些版本中的解析器仅接受打包中的 [packed=true]
字段格式,以及非打包格式的非[packed=true]
字段。
第三方实现可能支持也可能不支持此功能。您必须检查他们的文档,或者编写一个测试。
关于c++ - 使用 Packed=true 原型(prototype)文件读取非打包重复字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147712/