protobuf入门教程(一):简介和安装
1.1 简介
1.1.1 什么是protobuf
protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:Java、c#、c++、Go 和 Python,每一种实现都包含了相应语言的编译器以及库文件。
由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
更多详情请看:https://developers.google.com/protocol-buffers/docs/overview(需要翻墙)
1.1.2 protobuf的优缺点
1.1.2.1 优点
- 性能好/效率高
- 代码生成机制
- 支持“向后兼容”和“向前兼容”
- 支持多种编程语言
1.1.2.1 缺点
- 应用不够广(相比xml和json)
- 二进制格式导致可读性差
- 缺乏自描述
1.2 安装
1.2.1 Ubuntu环境搭建
github源代码下载地址:https://github.com/google/protobuf
源码包中的src/README.md, 有详细的安装说明,安装过程如下:
1、解压压缩包:unzip protobuf-master.zip
2、进入解压后的文件夹:cd protobuf-master
3、安装所需工具:sudo apt-get install autoconf automake libtool curl make g++ unzip
4、自动生成configure配置文件:./autogen.sh
5、配置环境:./configure
6、编译源代码(时间比较长):make
7、安装:sudo make install
8、刷新动态库:sudo ldconfig
1.2.2 环境测试
1.2.2.1 examples例子
在源代码包中,有个examples文件夹,把里面的addressbook.proto、add_person.cc、list_people.cc拷贝出来:
1.2.2.2 编译 .proto文件
- protoc:protobuf自带的编译工具,将.proto文件生成指定的类
- –cpp_out:指定输出特定的语言和路径
通过protoc工具编译.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
对C++来说,编译器会为每个.proto文件生成一个.h文件和一个.cc文件,.proto文件中的每一个消息有一个对应的类。
1.2.2.3 编译运行测试案例
1) 写文件(序列化)
编译代码:
- 反引号(` 数字1前面的符号):反引号的作用就是将反引号内的linux命令执行
- pkg-config 是通过库提供的一个.pc文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。
- pkg-config –cflags protobuf:列出指定共享库的预处理和编译flags
运行可执行程序:
pb.xxx文件内容如下:
2) 读文件(反序列化)
参考资料:
1、http://baike.baidu.com
2、http://www.jianshu.com/p/746bb9d81380