protobuf的描述
首先 protobuf是一个开源项目,是goole内部久经考验的一个东西。主要用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过他更小,更快,也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。甚至可以在无需重新部署程序的情况下更新数据结构。
protobuf的优点
1、性能好/效率高
时间开销: XML格式化(序列化)的开销还好;但是XML解析(反序列化)的开销就不敢恭维了。 但是protobuf在这个方面就进行了优化。可以使序列化和反序列化的时间开销都减短。
空间开销:protobuf也减少了很多。
2、有代码生成机制
比如你你写个一下类似结构体的内容
message testA
{
required int32 m_testA = 1;
}
像写一个这样的结构,protobuf可以自动生成它的.h 文件和点.cpp文件或者java类文件。 他将对结构体testA的操作封装成一个类。
3、支持向后兼容和向前兼容
当客户端和服务器同时使用一块协议的时候, 当客户端在协议中增加一个字节,并不会影响客户端的使用
4、支持多种编程语言
在Google官方发布的源代码中包含了c++、java、Python三种语言。
protobuf的缺陷
1、二进制格式导致可读性差
为了提高性能,protobuf采用了二进制格式进行编码。这直接导致了可读性差。
2、缺乏自描述
一般来说,XML是自描述的,而protobuf格式则不是。 给你一段二进制格式的协议内容,不配合你写的.proto文件是看不出来是什么作用的。