关于protobuf的介绍和优缺点
Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言无关,和平台无关,具有良好的可扩展性。Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议。
Protobuf支持生成代码的语言包括Java、Python、C++、Go、JavaNano、Ruby、C#,官网地址:Protocol Buffers。
Portobuf的序列化的结果体积要比XML、JSON小很多,XML和JSON的描述信息太多了,导致消息要大;此外Portobuf还使用了Varint 编码,减少数据对空间的占用。
Portobuf序列化和反序列化速度比XML、JSON快很多,是直接把对象和字节数组做转换,而XML和JSON还需要构建成XML或者JSON对象结构。
protobuf的优点
1:性能好/效率高:
时间开销: XML格式化(序列化)的开销还好;但是XML解析(反序列化)的开销就不敢恭维了。 但是protobuf在这个方面就进行了优化。可以使序列化和反序列化的时间开销都减短。
空间开销:protobuf也减少了很多。
2:有代码生成机制
比如有message.proto文件,内容如下:
message Person { int32 id = 1; string name = 2; }
通过protoc.exe工具可以自动生成 message.pb.h 和 message.pb.cc 文件。 它将对结构体Person的操作封装成一个类。
3:支持向后兼容和向前兼容
当客户端和服务器同事使用一块协议的时候, 当客户端在协议中增加一个字节,并不会影响客户端的使用
4:支持多种编程语言
在Google官方发布的源代码中包含了c++、java、Python三种语言
protobuf的缺点
1:二进制格式导致可读性差
为了提高性能,protobuf采用了二进制格式进行编码。这直接导致了可读性差。
2:缺乏自描述
一般来说,XML是自描述的,而protobuf格式则不是。 给你一段二进制格式的协议内容,不配合你写的结构体是看不出来什么作用的。
关于protobuf的使用教程请阅读文章:c++如何编译和使用probuf