最近(2015年1月),微软开源了其用于处理经过计划的数据的 Bond 框架。在许多方面,它与谷歌的Protocol Buffers相似。
这两者之间最大的区别是什么?它们的优缺点是什么?在哪些情况下我会使用其中一个而不是另一个呢?当然,我不是在谈论与其他项目或已有API的一致性等明显的事情,而是指两个库的特点。举个例子,Bond 有 bonded<T>
,如果我没记错的话,在 Protocol Buffers 中没有类似物。
最近(2015年1月),微软开源了其用于处理经过计划的数据的 Bond 框架。在许多方面,它与谷歌的Protocol Buffers相似。
这两者之间最大的区别是什么?它们的优缺点是什么?在哪些情况下我会使用其中一个而不是另一个呢?当然,我不是在谈论与其他项目或已有API的一致性等明显的事情,而是指两个库的特点。举个例子,Bond 有 bonded<T>
,如果我没记错的话,在 Protocol Buffers 中没有类似物。
总的来说,Bond具有更好的类型系统并支持多个协议。
具体而言,其优点包括:
vector<T>
、map<T>
、list<T>
bonded<T>
)缺点:
fixed32
和fixed64
。oneof
)我进行了一些测试,发现在Bond和ProtoBuf二进制格式中,简单消息的大小大约相同。我使用Bond和C# ProtoBuf库比较了序列化和反序列化时间:在我的情况下,Bond表现稍微更好,你可以在GitHub上查找我的源代码。
总之,我认为在处理某些复杂类型的数据或需要以不同格式表示相同数据时(例如存储为二进制文件,但以JSON格式公开),最好使用Bond。