1 protobuf介紹
Protobuf全稱Google Protocol Buffers
http://code.google.com/p/protobuf
結構化數據存儲格式(xml, json)
用於通信協議、數據存儲等
高效的序列化和反序列化
語言無關、平臺無關、擴展性好
官方支持C++, Java, Python三種語言
2 下載安裝
(1)下載
需要兩個包,protobuf-2.5.0.tar.gz,protoc-2.5.0-win32.zip。
本來可以到https://code.google.com/p/protobuf/downloads/list下載,不過被牆了。
可以移步到這裏下載:http://download.csdn.net/detail/erli11/7408633
下載相同版本供java使用的protobuf-java-2.5.0.jar:
http://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar
3 demo展示
(1)創建proto文件
在protoc-2.5.0-win32目錄(包含protoc.ext可執行文件),創建msg.proto
package discover;
option java_package = "com.sg.discover";
option java_outer_classname = "SocialRecommend";
message RecommendInfo {
optional string hid = 1;
optional string tags = 2;
repeated TopicInfo topicList = 3;
}
message TopicInfo {
optional string name = 1;
optional string type = 2;
repeated string entities = 3;
repeated string tags = 4;
}
(2)使用如下命令編譯proto文件,生成對應Java代碼
注:編譯成功無消息輸出,會產生文件;
./ 與 msg.proto中間有空格
(3)序列化
private SocialRecommend.RecommendInfo transRecommendInfoToPB(RecommendBean recommendInfo) {
SocialRecommend.RecommendInfo.Builder builder =
SocialRecommend.RecommendInfo.newBuilder();
builder.setHid(recommendInfo.hid);
builder.setTags(recommendInfo.tags);
for(int i = 0; i< recommendInfo.topicList.size(); i++){
TopicInfo topicInfo = recommendInfo.topicList.get(i);
SocialRecommend.TopicInfo kvTopic = trasnTopicInfoToPB(topicInfo);
builder.addTopicList(kvTopic);
}
return builder.build();
}
byte[] pbByteArray = pb.toByteArray();
(4)反序列化
SocialRecommend.RecommendInfo msg = SocialRecommend.RecommendInfo.parseFrom(pbByteArray);
System.out.println(msg);