Protocol Buffers的学习笔记

介绍——what

通常解释为,Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。简要理解为,Protocol Buffers是数据结构化格式,类似于JSON、XML。

使用——how

使用Protocol Buffers可以分为以下几个步骤:

  1. 定义*.proto格式文件,用来结构化数据,或者使用Protocol 语法来定义一个数据结构(C/S间通信或者对象序列化的数据结构)。
  2. 运行protocol编译器编译*.proto文件为指定语言(Java、go、c都可以)的类。
  3. 数据的读和写(序列化和反序列化)——每个protocol编译后的类都有使用二进制格式写和读你所定义的类型的消息的方法 。

例子
step 1——————创建Model.proto文件

package protobuf
message People{
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

step 2——————–编译为指定语言的类

//安装Protocol Buffers 编译器protoc
//编译Model.proto
protoc  --java(生成类的语言)_out=./src(生成目录) ./proto/Model.proto(根据的proto文件)

step 3——————–序列化和反序列化

//example1--序列化将数据传输出去,网络输出
//构建数据
Model.People.Builder peopleBuilder = Model.People.newBuilder();
peopleBuilder.setName("name1") ;
peopleBuilder.setId(10) ;
peopleBuilder.setEmail("1343483119@qq.com")
Model.People people=peopleBuilder.build();
//将对象写入输出流,通过二进制输出。
ByteArrayOutputStream output = new ByteArrayOutputStream();  
people.writeTo(output); 
byte[] byteArray = output.toByteArray();  

//
//example2--反序列化,对象数据从二进制中读取出来,byteArray为网络上传过来的二进制
ByteArrayInputStream input = new ByteArrayInputStream(byteArray);  
// 反序列化  
Model.People people= Model.People.parseFrom(input);
//获取people中的信息
好处——Why

没有对比就没有伤害

Protobuf:优点,传输速度快,可以方便的生成数据存取类,数据更小,在大多数平台上都有很好的支持。缺点,应用不够广,二进制格式导致可读性差,缺乏自描述。
JSON:人类可读/可编辑,可以提前解析模式,卓越的浏览器支持,比XML更冗长。
XML:人类可读/可编辑,可以提前解析模式,SOAP等标准
良好的工具支持(xsd,xslt,sax,dom等),相当冗长。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值