|
|
1
45
我使用Boost序列化已经很长时间了,只是深入研究了协议缓冲区,我认为它们没有完全相同的目的。BS(没有看到这一点)将您的C++对象保存到流中,而PB是一种您可以读取/读取的交换格式。 PB的数据模型要简单得多:你可以得到各种整数和浮点数、字符串、数组、基本结构,仅此而已。BS允许你在一个步骤中直接保存所有对象。
|
|
|
2
31
|
|
|
3
27
boost.serialization还有一些额外的问题,我将添加到其中。警告:除了浏览文档外,我对协议缓冲区没有任何直接经验。
你的班级 序列化库 . may not generate archives that older versions can deserialize .
publish the protocol buffers wire format forwards-compatible, backwards-compatible (尽管我认为维基百科指的是数据版本控制,而不是协议缓冲库版本控制)。虽然这两者都不能保证向前兼容性,但对我来说,这似乎是一个更强烈的迹象。 总之, 我更喜欢一种众所周知的、公开的通讯格式 脚注:无耻的插头 related answer 由我。 |
|
4
16
协议缓冲区
|
|
|
5
13
助推)。
|
|
|
6
11
用于保存和加载。如果C++是你唯一使用的语言,你应该认真对待boost.serialisation。
|
|
|
7
8
|
|
|
8
6
我从来没有使用boost的库实现过任何东西,但我发现Google protobuff的库更周到,代码也更清晰易读。我建议你看看你想用的各种语言,通读代码和文档,然后下定决心。
|
|
9
4
不用说,如果你依靠网络流另一端的其他人以与自己相同的活力来做到这一点,这是不可能的,也是不可靠的。此外,如果有效性约束发生变化,则需要计划、协调和完成多个代码更改。
==编辑==
您还可以执行以下操作:
注意
ASN.1是老式的,但仍在积极开发、广泛使用(你的手机经常使用它),并且比大多数其他串行化技术灵活得多。我能看到的唯一不足之处是Python没有像样的代码生成器。如果你使用的是C/C++、C#、Java、ADA,那么免费(C/C++、ADA)和商业(C/C++、C#和Java)工具的组合将为你提供很好的服务。 我特别喜欢二进制和基于文本的线格式的广泛选择。这使得它在某些项目中非常方便。线格式列表目前包括:
版本控制与GPB不同。您可以允许扩展:
如果GPB添加了约束(注意:这不会改变任何导线格式),我会向每个人推荐几乎所有用途的约束。尽管ASN.1的uPER对于无线电链路非常有用。 |
|
10
3
对我来说,这真的归结为工作流程,以及你是否需要在另一端使用C++以外的东西。 如果你想先弄清楚你的消息内容,并且你正在从头开始构建一个系统,请使用Protocol Buffers。你可以以抽象的方式思考消息,然后以你想要的任何语言自动生成代码(第三方插件几乎适用于所有内容)。此外,我发现使用Protocol Buffers简化了协作。我只发送了一个.proto文件,然后另一个团队就清楚地知道要传输的数据是什么。我也不会对他们强加任何东西。如果他们想使用Java,那就去吧! 如果我已经用C++构建了一个类(这种情况经常发生),并且我想现在通过网络发送这些数据,那么Boost序列化显然很有意义(尤其是在我已经在其他地方有Boost依赖关系的情况下)。 |
|
|
11
0
|
|
|
coolk · 如何使protobuf不区分大小写? 8 年前 |
|
|
Lolo · 如何解析protobuf文件中缺少引号的字符串字段? 8 年前 |
|
|
Cae Vecchi · 在自己的proto上导入供应商proto 8 年前 |
|
|
mbalug · 为ARM编译c++源代码 8 年前 |
|
|
FraserOfSmeg · 使用。vb中的proto文件。网 8 年前 |