ProtoBuf
简介
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法(或协议) ,它可用于网络通信、数据存储等。
其实就是一种序列化方式, 类似XML和JSON,都和语言、平台无关,都可用于数据传输、存储。
特点:
- 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
- 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
- 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序
相比于JSON和XML,
优点:
-
更快:序列化/反序列化性能更好
-
更小:占用空间更小
相同信息,使用protobuf传输、存储时数据量更小。
缺点:
1.可读性差
序列化和反序列化
序列化:将结构数据或对象转换成能够被存储和传输的格式,同时要保证这个序列化结果在之后能够被重建(即反序列化) 回原来的结构数据或对象(重建可能会在其他语言或平台中重建)。
序列化的目的:就是为了数据传输(通信)、数据存储。
关键点:序列化后的格式必须和语言、平台无关,在任何语言或平台的序列化结果,必须能在其他语言或平台中反序列化,否则不是一个好的序列化方式,不能用于数据传输、存储。比如,在Java程序中将一个对象序列化后传给C或Go程序,如果在C或Go中无法被反序列化,那么这个格式显然不适合用于数据传输、存储,因为不能跨语言、跨平台。
总结:序列化后的结果必须和语言、平台无关,才适用于数据通信、数据存储。
JSON、XML和ProtoBuf都满足。
JSON、XML和ProtoBuf的比较
两个维度比较:
- 数据结构化。
- 数据序列化。
- XML、JSON、ProtoBuf 都具有数据结构化和数据序列化的能力
- XML、JSON 更注重数据结构化,关注人类可读性和语义表达能力。ProtoBuf 更注重数据序列化,关注效率、空间、速度,人类可读性差,语义表达能力不足(为保证极致的效率,会舍弃一部分元信息)
- ProtoBuf 的应用场景更为明确,XML、JSON 的应用场景更为丰富。