google proto buffer使用

   听说google proto buffer(以下简称protobuf)已经很久了,但是一直没有尝试使用它。其中一个原因是,项目组自己写了个打包和解包的工具,而且代码也简单,可以很方便的扩展到自动生成xml之类的配置文件,已经能很好的符合项目的需要。但是最近发现protobuf有个很不错的功能,就是可以向已有的协议中添加新的字段,而不影响采用旧协议的服务。所以就想试试protobuf。

 

  要使用google proto buffer,首先要进行的就是安装,先说说我的(mac os X 10.7.2)安装过程吧:

  1、下载google proto buff。

  2、解压下载的包,并且阅读README.txt,根据里面的指引进行安装。

  3、 $ ./configure

    $ make

    $ make check
    $ make install

    没有意外的话,前面三步应该都能顺利完成,第四步的时候,需要root权限。我采用的默认的路径,所以,仅仅用root权限,还是安装不了,要自己先在/usr/local下新建一个lib的目录,然后执行make install,这样,应该就能顺利安装google proto buffer了。

 

  安装完后,先写一个测试程序来测试下安装,先来看看proto文件:

复制代码
  View Code
1 package hello;
2
3 message Hello{
4 required int32 id = 1; //user id
5 required string name = 2; //user name
6 optional string email = 3; //user email
7 }
复制代码

 

  接着,要用protoc生成一个对应的类,我把它生成在./out目录里:

  protoc hello.proto --cpp_out=./out

  接下来,在out目录下,会生成两个文件:

  $> ls

  hello.pb.cc hello.pb.h  

 

  接下来,编写测试用的c++代码:

  

复制代码
hello.cc
 1 #include <stdio.h>
2 #include <string.h>
3
4 #include "out/hello.pb.h"
5
6 using namespace std;
7 using namespace hello;
8
9 int main()
10 {
11 Hello a;
12 a.set_id(101);
13 a.set_name("huangwei");
14
15 string tmp;
16 bool ret = a.SerializeToString(&tmp);
17 if (ret)
18 {
19 printf("encode success!\n");
20 }
21 else
22 {
23 printf("encode faild!\n");
24 }
25
26 Hello b;
27
28 ret = b.ParseFromString(tmp);
29 if (ret)
30 {
31 printf("decode success!\n id= %d \n name = %s\n", b.id(), b.name().c_str());
32 }
33 else
34 {
35 printf("decode faild!\n");
36 }
37
38 return 0;
39 }
复制代码

 

  接着,编译一下这个代码,由于使用了protobuf的库,所以编译的时候,要把这些库也链接进来:

   g++ hello.cc ./out/hello.pb.cc -o hello -I./out -I/usr/local/protobuf/include -L/usr/local/lib -lprotobuf

 

  这样,就生成了测试程序。

  运行一下:

  $> ./hello
  encode success!
  decode success!
  id= 101
  name = huangwei

 

  这样,简单的google proto buffer的使用就完成了。有什么错误的地方,还请各位斧正。

 

  

posted @   MR_H  阅读(17981)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示