ProtoBuf(一)— 简介

242 阅读2分钟

ProtoBuf

简介

protocol buffers 是一种语言无关、平台无关、可扩展序列化结构数据的方法(或协议) ,它可用于网络通信、数据存储等。

其实就是一种序列化方式, 类似XML和JSON,都和语言、平台无关,都可用于数据传输、存储。

特点:

  • 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
  • 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
  • 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序

相比于JSON和XML,

优点:

  1. 更快:序列化/反序列化性能更好

  2. 更小:占用空间更小

    相同信息,使用protobuf传输、存储时数据量更小

缺点:

1.可读性差

序列化和反序列化

序列化:将结构数据对象转换成能够被存储和传输的格式,同时要保证这个序列化结果在之后能够被重建(即反序列化) 回原来的结构数据或对象(重建可能会在其他语言或平台中重建)。

序列化的目的:就是为了数据传输(通信)、数据存储。

关键点序列化后的格式必须和语言、平台无关,在任何语言或平台的序列化结果,必须能在其他语言或平台中反序列化,否则不是一个好的序列化方式,不能用于数据传输、存储。比如,在Java程序中将一个对象序列化后传给C或Go程序,如果在C或Go中无法被反序列化,那么这个格式显然不适合用于数据传输、存储,因为不能跨语言、跨平台。

总结:序列化后的结果必须和语言、平台无关,才适用于数据通信、数据存储。

JSON、XML和ProtoBuf都满足。

JSON、XML和ProtoBuf的比较

两个维度比较:

  • 数据结构化。
  • 数据序列化。
  1. XML、JSON、ProtoBuf 都具有数据结构化数据序列化的能力
  2. XML、JSON 更注重数据结构化,关注人类可读性和语义表达能力。ProtoBuf 更注重数据序列化,关注效率、空间、速度,人类可读性差,语义表达能力不足(为保证极致的效率,会舍弃一部分元信息)
  3. ProtoBuf 的应用场景更为明确,XML、JSON 的应用场景更为丰富。

参考文章

juejin.cn/post/692484…