protobuf 简单入门

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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值