protobuf使用简介

来源:互联网 发布:windows的发展过程 编辑:程序博客网 时间:2024/06/11 19:38

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


0 0