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);