没有合适的资源?快使用搜索试试~ 我知道了~
protobuf介绍入门和用法,适合初级使用,此资料只讲解protobuf是什么
资源推荐
资源详情
资源评论
ProtoBuf 开发者指南
1 概览
o 1.1什么是 protocol buffer
o 1.2 他们如何工作
o 1.3为什么不用 XML?
o 1.4听起来像是为我的解决方案,如何开始?
o 1.5 一点历史
2 语言指导
o 2.1 定义一个消息类型
o 2.2 值类型
o 2.3 可选字段与缺省值
o 2.4 枚举
o 2.5 使用其他消息类型
o 2.6 嵌套类型
o 2.7 更新一个数据类型
o 2.8 扩展
o 2.9 包
o 2.10 定义服务
o 2.11 选项
o 2.12 生成你的类
3 代码风格指导
o 3.1 消息与字段名
o 3.2 枚举
o 3.3 服务
4 编码
o 4.1 一个简单的消息
o 4.2基于 128 的 Varints
o 4.3 消息结构
o 4.4 更多的值类型
o 4.5 内嵌消息
o 4.6 可选的和重复的元素
o 4.7 字段顺序
5ProtocolBuffer 基础:C++
6ProtocolBuffer 基础:Java
7ProtocolBuffer 基础:Python
o 7.1为什么使用 ProtocolBuffer?
o 7.2 哪里可以找到例子代码
o 7.3 定义你的协议格式
o 7.4编译你的 ProtocolBuffer
o 7.5ProtocolBuffer API
7.5.1 枚举
7.5.2 标准消息方法
7.5.3 解析与串行化
o 7.6 写消息
o 7.7 读消息
o 7.8扩展 ProtocolBuffer
o 7.9 高级使用
8 参考概览
9C++ 代码生成
10C++ API
11Java 代码生成
12Java API
13Python 代码生成
o 13.1 编译器的使用
o 13.2 包
o 13.3 消息
o 13.4 字段
13.4.1 简单字段
13.4.2 简单消息字段
13.4.3 重复字段
13.4.4 重复消息字段
13.4.5 枚举类型
13.4.6 扩展
o 13.5 服务
13.5.1 接口
13.5.2存根(Stub)
14Python API
15 其他语言
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.1什么是 protocol buffer
ProtocolBuffer 是用于结构化数据串行化的灵活、高效、自动的方法,有如 XML,不过它更小、更快、也
更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以
在无需重新部署程序的情况下更新数据结构。
1.2他们如何工作
你首先需要在一个 .proto 文件中定义你需要做串行化的数据结构信息。每个 ProtocolBuffer 信息是一小段
逻辑记录,包含一系列的键值对。这里有个非常简单的 .proto 文件定义了个人信息:
!
"
#$%
&
'(
(
)*" +
&
'(,
&
有如你所见,消息格式很简单,每个消息类型拥有一个或多个特定的数字字段,每个字段拥有一个名字和
一个值类型。值类型可以是数字(整数或浮点)、布尔型、字符串、原始字节或者其他 ProtocolBuffer 类
型,还允许数据结构的分级。你可以指定可选字段,必选字段和重复字段。你可以在(
http://code.google.com/apis/protocolbuffers/docs/proto.html ) 找到更多关于如何编写 .proto 文件的信息。
一旦你定义了自己的报文格式(message),你就可以运行 ProtocolBuffer 编译器,将你的 .proto 文件编译
成特定语言的类。这些类提供了简单的方法访问每个字段( 像是 query() 和 set_query() ),像是访问类的方
法一样将结构串行化或反串行化。例如你可以选择 C++ 语言,运行编译如上的协议文件生成类叫做
Person 。随后你就可以在应用中使用这个类来串行化的读取报文信息。你可以这么写代码:
-./01203
-./,3
-./0456-703
*-/0809::;::(3
-<=/>3
然后,你可以读取报文中的数据:
*/0809::;:(3
-?/>3
7@@0':0@@-/3@@
7@@0 A:0@@-/3@@
你可以在不影响向后兼容的情况下随意给数据结构增加字段,旧有的数据会忽略新的字段。所以如果使用
ProtocolBuffer 作为通信协议,你可以无须担心破坏现有代码的情况下扩展协议。
你可以在 API 参考( http://code.google.com/apis/protocolbuffers/docs/reference/overview.html )中找到完
整的参考,而关于 ProtocolBuffer 的报文格式编码则可以在(
http://code.google.com/apis/protocolbuffers/docs/encoding.html )中找到。
1.3为什么不用 XML?
ProtocolBuffer 拥有多项比 XML 更高级的串行化结构数据的特性,ProtocolBuffer:
更简单
小 3-10 倍
快 20-100 倍
更少的歧义
可以方便的生成数据存取类
例如,让我们看看如何在 XML 中建模 Person 的 name 和 email 字段:
@B
@B12@CB
@B456-7@CB
@CB
对应的 ProtocolBuffer 报文则如下:
D7E 的文本表示
D这不是正常时使用的二进制数据
:0120
:0456-70
&
当这个报文编码到 ProtocolBuffer 的二进制格式(
http://code.google.com/apis/protocolbuffers/docs/encoding.html )时(上面的文本仅用于调试和编辑),它
只需要 28 字节和 100-200ns 的解析时间。而 XML 的版本需要 69 字节(除去空白) 和 5000-10000ns 的解
析时间。
当然,操作 ProtocolBuffer 也很简单:
7@@0':0@@-/3@@
7@@0 A:0@@-/3@@
而 XML 的你需要:
7@@0':0
@@- '/003AB/!3A
B6/3
@@
7@@0 A:0
@@- '/003AB/!3A
B6/3
@@
当然,ProtocolBuffer 并不是在任何时候都比 XML 更合适,例如 ProtocolBuffer 无法对一个基于标记文本
的文档建模,因为你根本没法方便的在文本中插入结构。另外,XML 是便于人类阅读和编辑的,而
ProtocolBuffer 则不是。还有 XML 是自解释的,而 ProtocolBuffer 仅在你拥有报文格式定义的 .proto 文件
时才有意义。
1.4听起来像是为我的解决方案,如何开始?
下载包( http://code.google.com/p/protobuf/downloads/ ),包含了 Java、Python、C++的 ProtocolBuffer
编译器,用于生成你需要的 IO 类。构建和安装你的编译器,跟随 README 的指令就可以做到。
一旦你安装好了,就可以跟着编程指导( http://code.google.com/apis/protocolbuffers/docs/tutorials.html )
来选择语言-随后就是使用 ProtocolBuffer 创建一个简单的应用了。
1.5一点历史
ProtocolBuffer 最初是在 Google 开发的,用以解决索引服务器的请求、响应协议。在使用 ProtocolBuffer
之前,有一种格式用以处理请求和响应数据的编码和解码,并且支持多种版本的协议。而这最终导致了丑
陋的代码,有如:
*/F3
---
&*/FB,3
剩余22页未读,继续阅读
资源评论
r19880613
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功