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