Protocol Buffers和Flatbuffers有什么区别?

154

两者都是由Google开发人员开发的序列化库。它们之间有什么重大区别吗?将使用Protocol Buffers编写的代码转换为使用FlatBuffers需要很多工作吗?

1个回答

173

我撰写了一份关于几种序列化系统的详细比较,包括Protobufs和FlatBuffers,点击这里查看。

然而,这份比较更侧重于比较三个“零拷贝”序列化系统,并将Protobufs作为参考点。此外,我是Cap'n Proto的作者,也是Protobufs v2的作者(我负责在Google开源Protobufs),所以这份比较可能有偏见。

(2021年更新)注意,Protobufs在2001年左右被引入Google,至今仍然是公司内部的“lingua franca”。FlatBuffers于2014年推出,用于某些项目中,但Protobuf仍然是Google主要的数据交换格式,没有更改的意图。公平地说,如果Google想要更改,他们可能无法实现,因为代码太多了。


11
可能还没有被广泛采用,但基准测试结果看起来相当不错。开源游戏库cocos2d-x目前已成功使用它。我认为Flatbuffer已经通过了实验阶段。 - user18853
3
@KentonVarda,自2014年6月以来,与FlatBuffers的比较有新的更新吗? - TJR
13
这篇文章称,Facebook 在其 Android 应用中使用 Flatbuffers。 - Alex Che
5
@KentonVarda:你好,如果您能提供有关此答案的更新,我们将不胜感激,因为 flatbuffers 目前被广泛使用,例如在 tensorflow lite 中,我们有 tensorflow protobuf 文件,还有其更小的尺寸的 tensorflow lite flatbuffers,知道他们各自的优缺点会对 SO 上的人有所帮助,他们将能够了解哪种更适合特定用例,并与 Cap'n Proto 进行比较,特别是针对移动设备的 flatbuffers。谢谢! - aspiring1
2
@HugoGresse,我撤销了你的编辑,并进行了另一种编辑,以删除FlatBuffers是“实验性”的断言,并指出它在某些项目中使用,但澄清Protobuf仍然是Google内部的通用语言。如果有人想提交更好的答案来回答这个问题,欢迎他们这样做。 - Kenton Varda
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接