Protocol Buffers的学习笔记
2017-09-30 21:12
260 查看
介绍——what
通常解释为,Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。简要理解为,Protocol Buffers是数据结构化格式,类似于JSON、XML。使用——how
使用Protocol Buffers可以分为以下几个步骤:定义*.proto格式文件,用来结构化数据,或者使用Protocol 语法来定义一个数据结构(C/S间通信或者对象序列化的数据结构)。
运行protocol编译器编译*.proto文件为指定语言(Java、go、c都可以)的类。
数据的读和写(序列化和反序列化)——每个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等),相当冗长。
相关文章推荐
- vim学习笔记
- MySQL学习笔记——20170812
- UNIX环境编程学习笔记(13)——文件I/O之标准I/O流
- Delphi的学习笔记十二——方法1
- 20171130学习笔记之DDL、DML和DCL之见的区别
- Android课堂学习笔记——SharedPreferences
- 学习笔记——Maven实战(九)打包的技巧
- Linux Glibc(学习笔记三)
- BI学习笔记之一 - 什么是BI?
- 韩顺平j2ee学习笔记与心得
- C# 学习笔记
- Python学习笔记--函数
- CCNA 学习笔记(五)--动态路由协议(EIGRP)
- IOS学习笔记--利用UIWindow实现自定义AlertView
- C#学习笔记(六)抽象类 访问限制关键字 委托 事件
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目
- easyui学习笔记2:页面布局,layout插件
- SPL学习笔记之二:迭代器
- 学习笔记一
- C++函数指针 学习笔记