Protobuf是什么?git
Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,能够用于网络通讯和数据存储。github
Protobuf的优缺点?编程
优势:json
①相比较XML和JSON格式,protobuf更小、更快、更便捷。它以高效的二进制方式存储,比XML小3到10倍,快20到100倍。因此性能比较好,效率天然也高。服务器
②有代码生成机制。能够自定义数据结构,而后使用代码生成器生成的代码来读写这个数据结构。 好比你你写个一下相似结构体的内容:网络
message test { required int32 test = 1; }
像写一个这样的结构,protobuf能够自动生成一个.cpp文件或者其余语言(Python、Java等)文件。 protobuf将对结构体test的操做封装成一个类。便于使用。数据结构
③支持向后兼容和向前兼容。编程语言
当客户端和服务器同事使用一块协议的时候, 当客户端在协议中增长一个字节,并不会影响客户端的使用。性能
④支持多种编程语言。 Protobuf目前已经支持Java,C++,Python、Go、Ruby等多种语言。测试
缺点
①二进制格式致使可读性差。
为了提升性能,protobuf采用了二进制格式进行编码。这直接致使了可读性差。
②缺少自描述。
通常来讲,XML是自描述的,而protobuf格式则不是。 给你一段二进制格式的协议内容,不配合你写的结构体是看不出来什么做用的。
③通用性差。
protobuf虽然支持了大量语言的序列化和反序列化,但相比json 和 XML,通用性仍是没那么好。
Protobuf的使用?
GitHub地址: https://github.com/google/protobuf
获取Release版本的地址是:https://github.com/google/protobuf/releases 你能够从这个地址下载你所须要的安装包。
谷歌官方文档: https://developers.google.com/protocol-buffers/
安装方法:我下载的是releases版本,使用的Ubuntu系统,解压后执行安装命令便可:
$ ./configure $ make && make install $ sudo ldconfig # refresh shared library cache.
一般状况ProtoBuf都安装在/usr/local目录下,该目录下包含了ProtoBuf的头文件,静态库和动态库文件。安装后测试protoc命令,该程序用于把proto文件翻译成目标代码:
protoc --version