protobuf配置與使用


Protobuf配置與安裝

1 安裝與配置

           1、protobuf是google公司提出的數據存儲格式,詳細介紹可以參考:https://code.google.com/p/protobuf/

           2、下載最新的protobuf,下載地址:https://code.google.com/p/protobuf/downloads/list

           3、下載protobuf2.5.o版本,protobuf-2.5.0.tar.gz解壓並進行安裝。

   解壓:tar xvf protobuf-2.5.0.tar.gz

   安裝步驟:(1)./configure (2)make (3)make check (4)make install

注意:安裝成功后,將它的bin和lib目錄分別加入到PATH和LD_LIBRARY_PATH環境變量,以方便直接調用。

通常建議安裝到/usr/local目錄下,執行configure時,指定--prefix=/usr/local/protobuf即可

設置環境變量過程:編輯/etc/profile,在文件末尾添加:

       export PATH=$PATH:/usr/local/protobuf/bin

       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

 

2 簡單實例

         2.1 編寫example.proto

        clip_image001

 

          2.2 生成pb.h 和pb.c

         protoc  -I=src_dir  --cpp_out=dst_dir  $src_dir/addressbook.proto 

                    生成example.pb.h 和example.pb.cc

                   clip_image002

 

          2.3 使用protobuf

                 2.3.1 編寫Write.cpp

                  clip_image004

          注:

                 ptest::person 的定義在example.proto 生成的example.pb.h 文件中進行聲明,SerializeToOstream將對象序列化后寫入fstream流。

 

               2.3.2 編譯write.cpp

               clip_image006     

        注:

           -I /usr/local/include –L /usr/local/lib 分別為編譯安裝protobuf對應文件位置(cygwin對應目錄位置),CentOs中編譯安裝protobuf后對應的文件位置        為:/usr/local/protobuf/include 和 /usr/local/protobuf/lib

 

              2.3.3 編寫reader.cpp

                reader.cpp文件如下:

                clip_image007

            注:

                  1、ParseFromIstream從fstream中讀取文件並反序列化。

                  2、編譯reader.cpp:

                     clip_image009

 

  3 數據類型

         3.1 消息定義

          Protobuf消息定義:

          消息由至少一個字段組合而成,類似於C語言中的結構。每個字段都有一定的格式。

          字段格式:限定修飾符① | 數據類型② | 字段名稱③ | = | 字段編碼值④ | [字段默認值⑤]

          限定修飾符包含 required\optional\repeated

         1) required: 表示是一個必須字段,必須相對於發送方,在發送消息之前必須設置該字段的值,對於接收方,必須能夠識別該字段的意思。發送之前沒有設置required字段或者無法識別required字段都會引發編解碼異常,導致消息被丟棄。

         2) optional:表示是一個可選字段,可選對於發送方,在發送消息時,可以有選擇性的設置或者不設置該字段的值。對於接收方,如果能夠識別可選字段就進行相應的處理,如果無法識別,則忽略該字段,消息中的其它字段正常處理。---因為optional字段的特性,很多接口在升級版本中都把后來添加的字段都統一的設置為optional字段,這樣老的版本無需升級程序也可以正常的與新的軟件進行通信,只不過新的字段無法識別而已,因為並不是每個節點都需要新的功能,因此可以做到按需升級和平滑過渡。

        3) repeated:表示該字段可以包含0~N個元素。其特性和optional一樣,但是每一次可以包含多個值。可以看作是在傳遞一個數組的值。

 

      3.2 數據類型

          Protobuf定義了一套基本的數據類型,如下圖所示:

          clip_image011

 

參考資料:

       http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ 

       http://www.cnblogs.com/Anker/archive/2013/07/24/3209764.html


免責聲明!

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



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