Protocol Buffer的安装与使用
转载请注名出处和作者:franciscolv. ?http://www.cnblogs.com/franciscolv/archive/2012/05/05/2485348.html
?
最近要在产品中改进对象的序列化了。以前用的是java默认序列化实现功能,在产品上线之前要对关键的对象进行序列化/反序列化优化,以期改善存储效率。这里选取了Protocol buffer作为最终的方案,原因主要有以下几个方面:
1java默认序列化效率较低。
2apache的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文件:
?
option java_outer_classname = "UserModelDatas";message ContextMatchedItemPair{message Context{optional string time=1; optional int32 temperature=2; optional string weather=3; optional string location=4; optional int32 priority=5;}optional Context context=1;message MatchedItem{ optional string itemTypeId=1; optional double matchRatio=2; optional string approachType=3; message Item{ optional string itemID =1; optional string type=2; optional string url=3; optional string img=4; optional string title=5; optional string abs=6; optional string date=7; optional string sourceTypeId=8;} optional Item item=4;}repeated MatchedItem matchedItem = 2;}//out classmessage UserModelData{repeated ContextMatchedItemPair contextMatchedItemPair=1;}
?
?
执行命令:protoc --java_out=.?UserModelData.proto ?即在同级目录下生成UserModelDatas类,该类即可在工程中使用了。如果要使用的话,还需要在工程中引入安装过程中生成的protobuf-java-2.4.1.jar 。
?
PS: 注意到我的所有类型都是repeated或者optional,并没有用required。 个人习惯而已。