zoukankan      html  css  js  c++  java
  • google proto buffer使用

    google proto buffer使用 - MR_H - 博客园

    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目录下,会生成两个文件:

    $Sgt; 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

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

    运行一下:

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

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

  • 相关阅读:
    HTML
    JavaScript-DOM
    Visual Studio Usage
    Char 05 使用提供程序
    Char 04 运行命令
    Char 03 使用帮助系统
    char 02 初识 Powershell
    Char 01 PowerShell
    Linux Nginx
    Linux SSLH
  • 原文地址:https://www.cnblogs.com/lexus/p/2778264.html
Copyright © 2011-2022 走看看