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倍。
Java通信
如果仅使用JavaScript环境(例如Node.js应用程序和Web浏览器)作为接口,那么在花时间学习和将端点迁移到Protobuf之前,会三思而后行。但是,当开始添加其他平台(例如Java,Android,Python等)时,将开始看到使用Protobuf的真正好处
当拥有不是JSON原生部分的环境时,性能将得到极大改善。因此,每当遇到JSON的某些延迟问题时,请考虑迁移到Protobuf。
用Java解析和序列化
1 | protobuf-java |
使用JavaScript进行解析和序列化
使用的库protobuf.js帮助我将.proto消息编译为JavaScript并交换了这些消息。我要做的第一件事是将其安装为依赖项。