优秀的protobuf实例

关于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 testBuf
		UserProtobuf.userBuf.Builder builder = UserProtobuf.userBuf.newBuilder();
		builder.setID(777);
		builder.setUrl("shiqi");
		builder.setIsSD(true);

		// testBuf
		UserProtobuf.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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值