十分钟上手Protocol Buffer

ProtocolBuffer是什么?

ProtocolBuffer(简写PB)是一个方便序列化和反序列化而写的一个支持多语言(C++、java、python、go等)的工具。可以看看Github上谷歌的ReadMe文档:https://github.com/google/protobuf

安装ProtocolBuffer工具

下载源码

git clone git@github.com:google/protobuf.git

编译安装

关于编译安装的步骤参考Github上的Readme文档,也可以参考中文的文档:http://bafeimao.net/2015/11/14/compile-protobuf-on-mac/

首先,安装依赖。

PB依赖autoconf、automake、libtool、curl,在各个平台上安装这些依赖即可。比如在mac上是这样:

brew install autoconf automake libtool curl

然后运行autogen脚本

./autogen.sh

我在运行这个脚本的时候,会遇到gmock下载被墙的问题,前往这个地址手动下载即可:https://googlemock.googlecode.com/files/gmock-1.7.0.zip 下载之后,将它丢到源代码目录即可。同时将脚本中的

#curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip 

注释掉即可。

编译

$ ./configure
$ make
$ make check
$ sudo make install

查看是否安装完毕

protoc --version

这里的protoc是protocol buffer的编译器,将*.proto接口文件编译成对于的头文件和源代码文件,可以在下面的例子教学中用到。

Protocol Buffer的官方例子

例子是神马,在哪个地方?

例子是一个添加地址的例子,将用户的姓名、邮件地址序列化之后写入到文件中。例子在Github的example文件夹中。

例子如何编译和运行

有一个makefile文件,里面包含了C++、java、python等的编译,我们这里学习C++,故运行:

make cpp

我们可以查看makefile文件,可以找到关键的编译语句如下:

protoc_middleman: addressbook.proto
      protoc --cpp_out=. --java_out=. --python_out=. addressbook.proto
add_person_cpp: add_person.cc protoc_middleman
      pkg-config --cflags protobuf  # fails if protobuf is not installed
      c++ add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config --cfla    gs --libs protobuf`

我在运行的时候,遇到了pkg-config找不到的问题,安装即可:

brew install pkg-config

编译之后就可以得到可执行文件。如下方式运行:

./add_person_cpp zy

按照提示输入相关信息,就可以得到zy文件。

例子程序简单解读

例子的教学可以参考官方文档:https://developers.google.com/protocol-buffers/docs/cpptutorial
也可以参考这个中文文档:http://www.cnblogs.com/yymn/articles/5012396.html
add_person.cc程序的主流程如下:
* 参数解析
* 定义一个address的对象
* 处理输入,为对象赋值
* 将对象序列化到输出流中
这里就不贴代码了,看看源码就知道怎么回事了
至此,Protocol Buffer的安装和官方例子的学习基本结束,可以明白PB的基本用法流程,接下来就是在具体的场景中使用,然后进阶弄清楚PB的实现原理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值