Protocol Buffers和Flatbuffers之间有什么区别?

min*_*ing 101 protocol-buffers flatbuffers

两者都是序列化库,由Google开发人员开发.他们之间有什么大不同吗?将代码从协议缓冲区转移到FlatBuffers是一项艰苦的工作吗?

Ken*_*rda 117

我写了几个序列化系统的详细比较,包括Protobufs和FlatBuffers,这里:

https://kentonv.github.io/capnproto/news/2014-06-17-capnproto-flatbuffers-sbe.html

然而,比较更侧重于比较三个新的"零拷贝"序列化系统,并且主要包括Protobufs作为参考点.另外,我是Cap'n Proto的作者,也是Protobufs v2的作者(我负责在谷歌开源Protobufs),因此比较可能有偏见.

请注意,Protobufs在整个Google自己的服务中使用,而FlatBuffers更像是一个实验项目,据我所知,它尚未在内部广泛采用.

  • 根据[本文](https://code.facebook.com/posts/872547912839369/improving-facebook-s-performance-on-android-with-flatbuffers/),Facebook在其Android应用程序中使用Flatbuffers. (9认同)
  • 它可能没有被广泛采用,但基准看起来相当不错.开源游戏库cocos2d-x现在正在成功使用它.我认为Flatbuffer已经过了实验阶段 (8认同)
  • @KentonVarda,自2014年6月以来与FlatBuffers进行比较的任何新更新? (3认同)
  • @KentonVarda:嗨,Kenton,如果您能提供对此答案的更新,我会非常高兴,因为这些天“flatbuffers”被大量使用,例如在**tensorflow lite**中,我们有tensorflow protobuf文件,还有尺寸较小的 Tensorflow lite Flatbuffers,这将有助于了解 SO 的优缺点,以便能够理解哪一个更适合特定用例,以及与 Cap'n Proto 的比较,尤其是针对适用于移动设备的平面缓冲区,谢谢! (2认同)
  • @HugoGresse 我删除了您的编辑并进行了不同的编辑,以删除 FlatBuffers 是“实验性的”并在某些项目中使用的断言,但澄清 Protobuf 仍然是 Google 内部的通用语言。如果有人想对此问题提交更好的答案,欢迎他们这样做。 (2认同)