1. 概述
protobuf(Protocol Buffers )是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
特点:
- 结构数据串行化,灵活、高效、自动。
- 相对XML,更小、更快、更简单。
- 自定义数据结构。
- 动态更新数据结构。
2. 安装protobuf
首先,可以从github protobuf工程获取最新版本的源码。然后安装上面的README教程进行安装。大致过程如下:
(1). 运行autogen.sh,生产configure脚本。此过程会自动下载gmock文件,运行autorun、autoconf等。
(2). 编译安装protobuf。
$ ./configure
$ make
$ make check
$sudo make install
默认情况下,程序会安装到/usr/local/
目录,但是有些平台上/usr/local/lib
并不在LD_LIBRARY_PATH
的环境变量中。我们可以通过以下语句配置程序的安装目录。
./configure –prefix=/usr
3. 使用protobuf
3.1 编写接口文件(.proto)
.proto文件类似于c/c++中的数据定义,这里以test.proto
为例:
message TestMsg
{
required int32 id=1;
required string describe=2;
optional string opt=3;
}
上面定义了一个消息,有三个成员,必须有的int类型的id,string类型的describe和可选的string类型的opt。最上面也可以加上包名package pkg_name
。
3.2 编译.proto文件
用 Protobuf 编译器将该文件编译成目标语言,这里使用c++。
protoc -I=$SRC_DIR –cpp_out=$DST_DIR $SRC_DIR/test.proto
$SRC_DIR是目标路径,–cpp_out输出c++语言版本文件。这里会生成两个文件test.pb.h和test.pb.cc。生产的头文件中定义了一个TestMsg的类,后面会有对它的一系列序列化操作。
3.3 编写运行测试程序
为了方便测试,这里只写一个小程序write.c
,讲message序列化为string类型的字符串,然后再反序列化回来。测试程序如下:
#include "test.pb.h"
#include < stdio.h>
#include < string>
int main()
{
TestMsg tmsg;
tmsg.set_id(1001);
tmsg.set_describe("this is a describe.");
std::string s;
tmsg.SerializeToString(&s);
printf("%s\n",s.c_str());
TestMsg msg2;
msg2.ParseFromString(s);
printf("id:%d\t describe:%s\n",msg2.id(), msg2.describe().c_str());
return 0;
}
编译和运行程序。
c++ -o write write.cc test.pb.cc
pkg-config --cflags --libs protobuf
运行结果:
this is a describe.
id:1001 describe:this is a describe.
版权声明:本文为博主原创文章,未经博主允许不得转载。