没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
Protocol Buffer 中文翻译
1 简介.............................................................................................................................................................................. 3
1.1 概览.................................................................................................................................................................. 3
1.2 什么是 protocol buffer................................................................................................................................... 3
1.3 他们如何工作..................................................................................................................................................3
1.4 为什么不用 XML.............................................................................................................................................4
1.5 一点历史..........................................................................................................................................................5
2 语言指导...................................................................................................................................................................... 6
2.1 定义一个消息类型..........................................................................................................................................7
2.1.1 指定字段类型........................................................................................................................................7
2.1.2 分配标识号............................................................................................................................................7
2.1.3 指定字段规则........................................................................................................................................7
2.1.4 添加更多消息类型................................................................................................................................8
2.1.5 添加注释................................................................................................................................................8
2.1.6 从你的.proto 文件生成了什么?........................................................................................................ 8
2.2 标量数值类型..................................................................................................................................................9
2.3 可选的字段和默认值................................................................................................................................... 10
2.4 枚举................................................................................................................................................................10
2.5 使用其他消息类型........................................................................................................................................11
2.5.1 导入定义..............................................................................................................................................11
2.6 嵌套类型........................................................................................................................................................12
2.6.1 Groups..................................................................................................................................................13
2.7 更新一个消息类型........................................................................................................................................13
2.8 扩展................................................................................................................................................................14
2.8.1 嵌套的扩展..........................................................................................................................................14
2.8.2 选择可扩展的标符号......................................................................................................................... 15
2.9 包(Package)............................................................................................................................................ 16
2.9.1 包及名称的解析..................................................................................................................................16
2.10 定义服务(Service)................................................................................................................................... 16
2.11 选项(Options)......................................................................................................................................18
2.12 自定义选项................................................................................................................................................19
2.13 生成访问类................................................................................................................................................22
3 编码风格....................................................................................................................................................................22
3.1 消息和字段名................................................................................................................................................22
3.2 枚举................................................................................................................................................................23
3.3 服务................................................................................................................................................................23
4 编码............................................................................................................................................................................23
4.1 一个简单的消息............................................................................................................................................24
4.2 Base 128 Varints......................................................................................................................................... 24
4.3 消息结构........................................................................................................................................................24
2
4.4 更多的值类型................................................................................................................................................25
4.4.1 有符号整数..........................................................................................................................................25
4.4.2 非 varint 数字......................................................................................................................................26
4.4.3 字符串..................................................................................................................................................26
4.5 嵌套的消息....................................................................................................................................................27
4.6 可选和重复元素............................................................................................................................................27
4.6.1 Packed Repeated 字段......................................................................................................................27
4.7 字段顺序........................................................................................................................................................28
5 Protocol Buffer Basics: Java................................................................................................................................. 28
5.1 定义 proto 文件............................................................................................................................................ 28
5.2 编译 Protocol Buffers 文件.........................................................................................................................30
5.3 Protocol Buffer API 使用............................................................................................................................ 30
5.3.1 枚举和嵌套类......................................................................................................................................31
5.3.2 Builders 对 Messages.......................................................................................................................32
5.3.3 标准的 Message 方法....................................................................................................................... 32
5.3.4 解析及序列化......................................................................................................................................32
5.3.5 写入消息..............................................................................................................................................33
5.3.6 读取消息..............................................................................................................................................35
5.3.7 对 Protocol Buffer 进行扩展.............................................................................................................36
5.4 高级用法........................................................................................................................................................36
6 Techniques............................................................................................................................................................... 37
3
1 简介
1.1 概览
欢迎来到 protocol buffer 的开发者指南文档,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储
的结构化数据串行化方法。
本文档面向希望使用 protocol buffer 的 Java、C++或 Python 开发者。这个概览介绍了 protocol buffer,并告
诉你如何开始,你随后可以跟随编程指导( http://code.google.com/apis/protocolbuffers/docs/tutorials.html )深入了
解 protocol buffer 编 码 方 式 ( http://code.google.com/apis/protocolbuffers/docs/encoding.html ) 。 API 参 考 文 档
( http://code.google.com/apis/protocolbuffers/docs/reference/overview.html )同样也是提供了这三种编程语言的版
本 , 协 议 语 言 ( http://code.google.com/apis/protocolbuffers/docs/proto.html ) 和 样 式
( http://code.google.com/apis/protocolbuffers/docs/style.html )指导都是编写 .proto 文件。
1.2
什么是
protocol buffer
ProtocolBuffer 是用于结构化数据串行化的灵活、高效、自动的方法,有如 XML,不过它更小、更快、也更简
单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部
署程序的情况下更新数据结构。
1.3
他们如何工作
你首先需要在一个 .proto 文件中定义你需要做串行化的数据结构信息。每个 ProtocolBuffer 信息是一小段逻
辑记录,包含一系列的键值对。这里有个非常简单的 .proto 文件定义了个人信息:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
4
}
repeated PhoneNumber phone = 4;
}
有如你所见,消息格式很简单,每个消息类型拥有一个或多个特定的数字字段,每个字段拥有一个名字和一个
值类型。值类型可以是数字(整数或浮点)、布尔型、字符串、原始字节或者其他 ProtocolBuffer 类型,还允许数据
结 构 的 分 级 。 你 可 以 指 定 可 选 字 段 , 必 选 字 段 和 重 复 字 段 。 你 可 以 在
( http://code.google.com/apis/protocolbuffers/docs/proto.html )找到更多关于如何编写 .proto 文件的信息。
一旦你定义了自己的报文格式(message),你就可以运行 ProtocolBuffer 编译器,将你的 .proto 文件编译成特
定语言的类。这些类提供了简单的方法访问每个字段(像是 query() 和 set_query() ),像是访问类的方法一样将结
构串行化或反串行化。例如你可以选择 C++语言,运行编译如上的协议文件生成类叫做 Person 。随后你就可以在
应用中使用这个类来串行化的读取报文信息。你可以这么写代码:
Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email("jdoe@example.com");
fstream.output("myfile",ios::out | ios::binary);
person.SerializeToOstream(&output);
然后,你可以读取报文中的数据:
fstream input("myfile",ios::in | ios:binary);
Person person;
person.ParseFromIstream(&input);
cout << "Name: " << person.name() << endl;
cout << "E-mail: " << person.email() << endl;
你可以在不影响向后兼容的情况下随意给数据结构增加字段,旧有的数据会忽略新的字段。所以如果使用
ProtocolBuffer 作为通信协议,你可以无须担心破坏现有代码的情况下扩展协议。
你可以在 API 参考( http://code.google.com/apis/protocolbuffers/docs/reference/overview.html )中找到完整的
参 考 , 而 关 于 ProtocolBuffer 的 报 文 格 式 编 码 则 可 以 在
( http://code.google.com/apis/protocolbuffers/docs/encoding.html )中找到。
1.4 为什么不用 XML
如果要序列化结构化数据,比起 XML,PB 实在是有许多的优点可以道道~
更简单
比 XML 小 3~10 倍
比 XML 快 20~100 倍
语义定义明确
自动生成数据存取类,更容易使用
假如我们要模拟一个 Person,该对象包含 name 和 email 属性,如果用 XML,我们定义如下:
<person>
5
<name>John Doe</name>
<email>jdoe@example.com</email>
</person>
对应的,PB 如下:
# Textual representation of a protocol buffer.
# This is *not* the binary format used on the wire.
person {
name: "John Doe"
email: "jdoe@example.com"
}
请注意:这里仅是 PB 格式的一种直观表示,真实的 PB 并非这样存储,实际上,在链路中,PB 数据时二进制
格式的。
当这段数据编码为 PB 二进制格式时,其实际大小大概是 28bytes,编码时间为 100~200 纳秒。如果用 XML
的话,即使去除空格,大小也至少为 69bytes,编码时间大概需要 5000~10,000 纳秒。
同样,解析这段代码,PB 比 XML 要方便许多。用 PB 的话:
cout << "Name: " << person.name() << endl;
cout << "E-mail: " << person.email() << endl;
而用 XML 的话:
cout << "Name: "
<< person.getElementsByTagName("name")->item(0)->innerText()
<< endl;
cout << "E-mail: "
<< person.getElementsByTagName("email")->item(0)->innerText()
<< endl;
相比起来,PB 更直接,而且不需要遍历节点等 XML 操作。
但是,金无足赤,人无完人,PB 也一样。对于有很多标签的,基于文本的数据(例如 HTML),XML 就完胜 PB。
XML 是子描述的,可以随机且交错读取读取文本节点。XML 是自描述的,而 PB 不是,PB 必须要有格式定义文件
(.proto 文件)
1.5 一点历史
PB 由 Google 开发,最初是用于处理索引服务器的请求/响应协议。在有 PB 之前,Google 使用手动编组和解
组的方式来处理请求/相应协议。这种方式需要支持许多版本的协议,这就导致一些代码非常的丑陋,例如:
if (version == 3) {
...
} else if (version > 4) {
剩余36页未读,继续阅读
资源评论
- 紫焱萧萧2019-04-12下载了之后删除了。。未看内容
fm_VAE
- 粉丝: 17
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NetOps-py通过sftp替换网络设备启动文件
- STM32单片机FPGA毕设电路原理论文报告任务驱动教学法在单片机课程教学中的应用
- STM32单片机FPGA毕设电路原理论文报告任务驱动法在单片机教学中的应用
- STM32单片机FPGA毕设电路原理论文报告人造金刚石压机智能化压力测控系统设计
- 以某列为依据匹配多项(Excel版)
- STM32单片机FPGA毕设电路原理论文报告人体短臂离心机实验台的显示控制系统
- STM32单片机FPGA毕设电路原理论文报告人工气候室监控系统的环境控制器研究
- STM32单片机FPGA毕设电路原理论文报告染整自动线张力控制系统的设计
- 数据挖掘与机器学习-实验
- 基于Linux系统Nginx的动态网站的LNMP环境源码包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功