Protobuf和JSON

Protobuf

Protobuf是用于允许对结构化数据进行序列化和反序列化。Google开发它的目的是提供一种比XML更好的方法来使系统进行通信。因此,他们专注于使其比XML更简单,更小,更快和更可维护,甚至以更好的性能,更好的可维护性和更小的大小超过了JSON。

Protobuf具有三个主要组件:

  • 消息描述符。使用Protobuf时,我们必须在.proto文件中定义消息结构。
  • 消息实现。消息定义不足以用任何编程语言表示和交换数据。我们必须生成类/对象来处理所选编程语言中的数据。幸运的是,Google为最常见的编程语言提供了代码生成器。
  • 解析和序列化。定义和创建Protobuf消息后,我们需要能够交换这些消息。只要我们使用一种受支持的编程语言,

与JSON有何不同

尽管JSON和Protobuf消息可以互换使用,但是这些技术的设计目的不同。

JSON(JavaScript对象表示法)的简称,它只是一种消息格式,源于JavaScript编程语言的子集。

JSON消息以文本格式交换,如今,它们是完全独立的,并且几乎受所有编程语言的支持。

Protobuf不仅是消息格式,还是定义和交换这些消息的一组规则和工具。

该协议的创建者Google已使其成为开源软件,并提供了工具来为诸如JavaScript,Java,PHP,C#,Ruby,Objective C,Python,C ++和Go之类的最常用的编程语言生成代码。

除此之外,Protobuf具有比JSON更多的数据类型,例如枚举和方法,并且也大量用于RPC(远程过程调用)上。

缺点

  • 缺乏资源。有关Protobuf的使用和开发的资源少。
  • 较小的社区。可能是第一个劣势的根本原因。例如,在Stack Overflow上,会发现大约1.500个带有Protobuf标签的问题。JSON在同一平台上有18万多个问题。
  • 缺乏支持。Google不提供对其他编程语言(如Swift,R,Scala等)的支持。但是,有时,您可以使用第三方库(如Apple提供的Swift Protobuf)克服此问题。
  • 非人类可读性。JSON以文本格式交换并且具有简单的结构,很容易被人阅读和分析。二进制格式不是这种情况。

优点

  • 正式格式。格式是自描述的。
  • RPC支持。服务器RPC接口可以声明为协议文件的一部分。
  • 结构验证。与JSON相比,具有预定义且更大的数据类型集,可以通过负责交换它们的代码自动验证在Protobuf上序列化的消息

性能

Protobuf是Google创建的一种二进制格式,用于序列化不同服务之间的数据。Google将该协议开源,现在它提供了对大多数常用语言(如JavaScript,Java,C#,Ruby和其他语言)的支持。测试中,证明该协议的执行速度比JSON快6倍。

Protobuf/JSON性能及压缩比较

Java通信

如果仅使用JavaScript环境(例如Node.js应用程序和Web浏览器)作为接口,那么在花时间学习和将端点迁移到Protobuf之前,会三思而后行。但是,当开始添加其他平台(例如Java,Android,Python等)时,将开始看到使用Protobuf的真正好处

当拥有不是JSON原生部分的环境时,性能将得到极大改善。因此,每当遇到JSON的某些延迟问题时,请考虑迁移到Protobuf。

用Java解析和序列化

1
2
3
protobuf-java
protobuf-java-util
protobuf-java-format

使用JavaScript进行解析和序列化

使用的库protobuf.js帮助我将.proto消息编译为JavaScript并交换了这些消息。我要做的第一件事是将其安装为依赖项。

------ 本文结束------

本文标题:Protobuf和JSON

文章作者:Perkins

发布时间:2019年11月29日

原始链接:https://perkins4j2.github.io/posts/3676/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。