Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

5年前关闭。



Improve this question




最近(2015年1月),Microsoft开放了源代码Bond,它们是用于架构数据的框架。在许多方面,它类似于Google的Protocol Buffers

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

最佳答案

通常,Bond具有更好的类型系统并支持多种协议(protocol)。

特别是,优点是:

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

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

  • 我做了一些测试,发现Bond和ProtoBuf二进制格式的简单消息的大小几乎相同。我使用Bond和C#ProtoBuf库比较了序列化和反序列化的时间:对于我来说,Bond的性能要好一些,您可以找到source code on GitHub

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

    关于serialization - 微软的Bond和Google的 Protocol Buffer 之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27879239/

    10-09 13:54