0xC*_*ACE 64 c++ performance serialization protocol-buffers boost-serialization
有这些图书馆经验的人对他们喜欢哪一个有任何评论吗?使用中是否存在任何性能差异或困难?
ndf*_*red 44
我已经使用Boost Serialization很长一段时间了,只是挖掘协议缓冲区,我认为它们没有完全相同的目的.BS(没看到即将发布)将C++对象保存到流中,而PB是您可以读取/来自的交换格式.
PB的数据模型更简单:你得到各种整数和浮点数,字符串,数组,基本结构,这就是它.BS允许您一步直接保存所有对象.
这意味着使用BS可以在线路上获得更多数据,但是您不必重建所有对象结构,而协议缓冲区更紧凑,但在阅读存档后还有更多工作要做.顾名思义,一个用于协议(语言无关,空间有效的数据传递),另一个用于序列化(保存无脑的对象).
那么对您来说更重要的是:速度/空间效率还是干净的代码?
Mag*_*ind 29
我用两个系统玩了一下,没有什么严重的,只是一些简单的hackish东西,但我觉得你应该如何使用这些库有一个真正的区别.
使用boost :: serialization,你首先编写自己的结构/类,然后添加归档方法,但你仍然留下一些非常"苗条"的类,可以用作数据成员,继承,等等.
使用协议缓冲区,即使是简单的结构生成的代码量也相当大,生成的结构和代码更适合于操作,并且您使用协议缓冲区的功能来传输数据到您自己的内部结构和从您自己的内部结构传输数据.
bac*_*car 26
还有一些关于boost.serialization的额外问题,我将添加到混合中.警告:除了浏览文档之外,我对协议缓冲区没有任何直接经验.
请注意,虽然我认为boost和boost.serialization在它的功能方面非常出色,但我得出的结论是,它带来的默认存档格式对于有线格式来说并不是一个很好的选择.
版本之间的区别是很重要的你的类(在其他的答案中提到,boost.serialization有数据版本的一些支持)不同版本之间的兼容性和序列化库.
较新版本的boost.serialization 可能无法生成旧版本可以反序列化的存档.(反之亦然:较新版本始终用于反序列化旧版本制作的档案).这给我们带来了以下问题:
Google似乎实际上发布了协议缓冲区有线格式,而维基百科将它们描述为向前兼容,向后兼容(尽管我认为维基百科指的是数据版本控制而不是协议缓冲库版本控制).虽然这些都不是前向兼容性的保证,但对我来说似乎是一个更强有力的指示.
总之,当我无法以锁步方式升级客户端和服务器时,我更喜欢一种众所周知的已发布的有线协议缓冲区格式.
脚注:我无耻地插上相关答案.
Nic*_*ick 16
提升序列化
协议缓冲区
Boost序列化是一个用于将对象转换为序列化数据流的库.Protocol Buffers做同样的事情,但也为你做其他工作(比如版本控制和endian交换).对于"小型简单任务",Boost序列化更简单.协议缓冲区可能更适合"更大的基础架构".
编辑:24-11-10:添加"自动"到BS版本.
Tom*_*Tom 14
我没有使用boost序列化的经验,但我使用了协议缓冲区.我非常喜欢协议缓冲区.记住以下内容(我说这不知道提升).
希望这可以帮助.
Mai*_*ann 11
boost.serialization只需要C++编译器,并为你提供一些语法糖
serialize_obj >> archive;
// ...
unserialize_obj << archive;
Run Code Online (Sandbox Code Playgroud)
用于保存和加载.如果C++是你使用的唯一语言,你应该给boost.serialization一个严肃的镜头.
我快速浏览了谷歌协议缓冲区.从我看到的,我说它不能直接与boost.serialization相媲美.您必须将.proto文件的编译器添加到工具链并维护.proto文件本身.API没有像boost.serialization那样集成到C++中.
boost.serialization完成了它的设计工作:序列化C++对象:) OTOH像谷歌协议缓冲区这样的查询API为您提供了更大的灵活性.
由于到目前为止我只使用了boost.serialization,所以我无法对性能比较发表评论.
我从来没有使用boost的库实现任何东西,但我发现Google protobuff更加深思熟虑,而且代码更清晰,更易于阅读.我建议你看看你想要使用它的各种语言,并阅读代码和文档,并下定决心.
我使用protobufs的一个难点是他们在生成的代码GetMessage()中命名了一个非常常用的函数,当然这与Win32 GetMessage宏有冲突.
我仍然强烈推荐protobufs.它们非常有用.