Protocol Buffer的安裝與使用

轉載請註明作者與出處:franciscolv.  http://www.cnblogs.com/franciscolv/archive/2012/05/05/2485348.html 。

  最近要在產品中改進對象的序列化了。以前用的是java默認序列化實現功能,在產品上線之前要對關鍵的對象進行序列化/反序列化優化,以期改善存儲效率。這裏選取了Protocol buffer作爲最終的方案,原因主要有以下幾個方面:

1  java默認序列化效率較低。

2  apache的thrift方案並無明顯優勢,但是使用成本較高,安裝等較爲麻煩。

3  雖然PB不支持map,但是我們的應用中map用的較少,即使使用了存儲的數據量也較少,可以轉化爲list方案進行存儲。

4  以前我玩過PB,這很關鍵,當你有某方面的經驗時能較輕鬆的應對一些意外情況。

 

以上只是我選擇序列化方案的一些考慮。下面是PB的2.4.1版本的安裝與使用示例:

 

第一部分:windows7 安裝 protocol buffer  (如果沒有安裝Maven,先安裝maven,並且maven -version 驗證安裝成功)

 

1.下載地址: http://code.google.com/p/protobuf/downloads/list 。從這裏下載protobuf-2.4.1.tar.gz 和 protoc-2.4.1-win32.zip 兩個包。分別解壓到各自目錄。

2.將protoc-2.4.1-win32中的protoc.exe拷貝到c:\windows\system32中。

3.將proto.exe文件拷貝到解壓後的XXX\protobuf-2.4.1\src目錄中.

4.進入XXX\protobuf-2.4.1\java 目錄  執行maven package命令編輯該包 生成protobuf-java-2.4.1.jar文件(位於target目錄中)。

5.假設你的數據文件目錄在XXX\data目錄,把上一步生成的jar拷貝到該目錄中即可。

6.進入XXX\protobuf-2.4.1\examples目錄,可以看到addressbook.proto文件,執行命令 protoc --java_out=. addressbook.proto 命令,如果生成com文件夾並在最終生成AddressBookProtos類則說明安裝成功。

 

 

第二部分:使用篇

 

定義proto文件:

 

Java代碼  收藏代碼
  1. option java_outer_classname = "UserModelDatas";  
  2.   
  3. message ContextMatchedItemPair{  
  4.       
  5.     message Context{  
  6.         optional string time=1;  
  7.         optional int32 temperature=2;  
  8.         optional string weather=3;  
  9.         optional string location=4;  
  10.         optional int32 priority=5;  
  11.     }  
  12.     optional Context context=1;  
  13.     message MatchedItem{  
  14.   
  15.         optional string itemTypeId=1;  
  16.         optional double matchRatio=2;  
  17.         optional string approachType=3;  
  18.           
  19.         message Item{  
  20.             optional string itemID =1;  
  21.             optional string type=2;  
  22.             optional string url=3;  
  23.             optional string img=4;  
  24.             optional string title=5;  
  25.             optional string abs=6;  
  26.             optional string date=7;  
  27.             optional string sourceTypeId=8;  
  28.         }  
  29.           
  30.         optional Item item=4;  
  31.     }  
  32.     repeated MatchedItem matchedItem = 2;  
  33.       
  34. }  
  35. //out class  
  36. message UserModelData{  
  37.       
  38.     repeated ContextMatchedItemPair contextMatchedItemPair=1;  
  39. }  

 

 

執行命令:protoc --java_out=. UserModelData.proto  即在同級目錄下生成UserModelDatas類,該類即可在工程中使用了。如果要使用的話,還需要在工程中引入安裝過程中生成的protobuf-java-2.4.1.jar 。

 

PS: 注意到我的所有類型都是repeated或者optional,並沒有用required。 個人習慣而已。

發佈了9 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章