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。 个人习惯而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值