2011-02-12 222 views
6

协议缓冲区(protobuf)在GSON上的优缺点是什么?gson vs协议缓冲区

在什么情况下protobuf比GSON更合适?

对于非常普遍的问题,我很抱歉。

回答

11

json(通过gson库)和protobuf都可以在platorms之间移植;但

  • protobuf的是较小的(带宽)和更便宜的(CPU)读/写
  • JSON是人类可读/可编辑的(protobuf的是二进制;硬而不库支持解析)
  • protobuf的是微不足道的合并片段 - 只是连接
  • json很容易传递给网页客户端
  • protobuf的主要java版本需要合同定义(.proto)和代码生成; GSON似乎允许任意POJO使用(有一些关于这些对象的工作protobuf的实现,而不是Java的据我所知)

如果性能是关键:protubuf

对于网页(JavaScript)的使用,或者人类可读:json(可能通过gson)

+1

如果您正在寻找二进制序列化,Apache avro是另一种选择。合同定义(如.proto)是可选的,并带有内置的RPC支持 – 2011-02-13 18:26:07

0

如果你想要效率和跨平台,你应该在包含必要信息和应用程序的应用程序之间发送原始消息。

通过Java自己的机制,gson,protobufs或其他,创建数据不仅包含您希望发送的信息,还包含有关用于表示数据结构的逻辑结构/层次结构的信息你的应用程序中的数据

这使得这些类和数据映射的双重用途,一个用于在应用程序内部表示数据,另外两个用于传输到另一个应用程序。这两个角色可能会相互冲突,开发人员有责任记住他随时将使用的类,集合和数据布局也将被序列化。