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的使用就完成了。有什么錯誤的地方,還請各位斧正。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM