Protocol Buffers的学习笔记

介绍——what

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

使用——how

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//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等),相当冗长。

-------------本文结束感谢您的阅读-------------

本文标题:Protocol Buffers的学习笔记

文章作者:ComeOnJian

发布时间:2017年10月02日 - 16:10

最后更新:2018年04月12日 - 18:04

原始链接:https://jianwenjun.xyz/2017/10/02/Protocol-Buffers的学习笔记/

许可协议: 转载请保留原文链接及作者。

显示 Gitment 评论