优秀的protobuf实例

来源:互联网 发布:w10系统优化加速 编辑:程序博客网 时间:2024/06/06 14:38

关于protobuf的理论性简介可以看一下:http://blog.csdn.net/caisini_vc/article/details/5599468

那我来个简单的介绍,首先它是一个牛X的东西,谷歌推出的开源项目。它的作用是传递序列化数据用的。我们知道,在网络上或本地用于格式传输,大家可以用xml或json。

那protobuf的直接优点是:相较于xml字符冗余比较OK,写过IM通信的人会有深刻感受,使用基于xml的xmpp协议,%70的流量都是xml格式符;相较于json,又有良好的扩展性,我们知道xml一定是比json扩展性强的!

总结一下,protobuf具有良好的扩展性和不会有太多的格式标示符占用序列化空间,另外解析速度上也要有优势!缺点是可读性差,xml和json具有良好的可读性,但protobuf是采用二进制进行编码,需要序列化成对象后,查看其内容。

在实际的项目中,已经有上百万用户的APP应用采用protobuf,并成功验证OK


实例很简单:

1.编辑一个proto文件,取名叫User.proto

package protobuf; option java_package = "com.poxiao.protobuf"; option java_outer_classname = "UserProtobuf"; message userBuf  {   required int32 ID = 1;   required string Url = 2;   required bool IsSD = 3;}

2.使用protoc.exe生成上面编辑格式的java对应文件
命令(到所在文件目录执行哦)    protoc.exe --java_out=./  User.proto
执行完成后,如果什么都没显示并且所在文件夹下多出一个以我们的包名“com.poxiao.protobuf”,为目录结构的文件夹就证明,这步我们执行OK


3.上java代码,放在main方法里

// 序列化过程// UserProtobuf是生成类的名字,即proto文件中的java_outer_classname// userBuf是里面某个序列的名字,即proto文件中的message testBufUserProtobuf.userBuf.Builder builder = UserProtobuf.userBuf.newBuilder();builder.setID(777);builder.setUrl("shiqi");builder.setIsSD(true);// testBufUserProtobuf.userBuf info = builder.build();byte[] result = info.toByteArray();// 反序列化过程try {UserProtobuf.userBuf testBuf = UserProtobuf.userBuf.parseFrom(result);System.out.println(testBuf);} catch (InvalidProtocolBufferException e) {e.printStackTrace();}

结果输出:

ID: 777
Url: "shiqi"
IsSD: true

4.需要用的工具protoc.exe ,protobuf-java-2.4.1.jar 下载地址(不收费哦吐舌头):

http://download.csdn.net/detail/feixue1232/9148063






0 1
原创粉丝点击