31

最近(2015 年 1 月)Microsoft 开源Bond,他们用于处理模式化数据的框架。在许多方面,它类似于 Google 的Protocol Buffers

两者最大的区别是什么?有什么优点和缺点,也就是说,在哪些情况下我想使用一种,而不是另一种?当然,我不是在谈论明显的事情,比如与其他项目的一致性或已经存在的 API,而是两个库的特性。举个例子,bonded<T>如果我没记错的话,Bond 有它,它在 Protocol Buffers 中没有对应物。

4

1 回答 1

41

总的来说,Bond 有更好的类型系统,支持多种协议。

特别是,优点是:

  • Bond 支持泛型
  • Bond 有不同的类型来表示集合:vector<T>, map<T>,list<T>
  • Bond 支持类型安全的惰性反序列化 ( bonded<T>)
  • Bond 支持多种格式(快速二进制、紧凑二进制、XML、JSON)+ 编组和转码

缺点:

  • Bond 不支持固定和可变整数编码的不同类型。在 Bond 中,整数的编码方式由输出格式(快速或紧凑)决定,但在 Protocol Buffers 中,整数类型始终具有固定大小:fixed32fixed64.
  • Bond 不支持联合类型(oneof在协议缓冲区中)

我做了一些测试,看起来 Bond 和 ProtoBuf 二进制格式的简单消息的大小大致相同。我使用 Bond 和 C# ProtoBuf 库比较了序列化和反序列化时间:在我的例子中,Bond 表现得更好,你可以在 GitHub 上找到我的源代码

总而言之,我认为在处理一些复杂类型的数据或需要以不同格式表示相同数据时使用 Bond 更好:例如存储为二进制文件,但公开为 JSON 等。

于 2015-01-11T14:50:52.290 回答