Protocol Buffer简介

来源:互联网 发布:福科软件教学 编辑:程序博客网 时间:2024/06/08 02:14

Protocol Buffer是Google 的一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。
使用实例
package tutorial;
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];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}

细节解释

1、package declaration为了阻止不同工程间的naming conflicts,这儿的tutorial相当于namespace。

2、message是一个包含若干类型字段的集合,可以使用bool、int32、float、double和string类型。可以内嵌message集合,类似于struct。

3、“=1”、“2”记号标识在二进制编码中类型字段的独特Tag,表示不同的字段在序列化后的二进制数据中的布局位置。

Tag number 1-15相对于更高的数字,少用了一个字节,所以可以使用1-15的Tag作为commonly used的repeated elements,16或者更高的Tag留给less-commonly use留给optional elements。

4、每个字段都必须使用如下标示符

required:字段值必须被提供,否则消息会被认为uninitialized。optional:字段值可选repeated:字段也许会被重复任何次数(包括0次)。可以将repeated field看做动态大小数组。

5、enum是枚举类型定义的关键字,0和1表示枚举值所对应的实际整型值,和C/C++一样,可以为枚举值指定任意整型值,而无需总是从0开始定义。

6、可以在同一个.proto文件中定义多个message,这样便可以很容易的实现嵌套消息的定义。Protocol Buffer提供了另外一个关键字import,这样我们便可以将很多通用的message定义在同一个.proto文件中,而其他消息定义文件可以通过import的方式将该文件中定义的消息包含进来,如:
import “myproject/CommonMessages.proto”

限定符(required/optional/repeated)的基本规则:
1、在每个消息中必须至少留有一个required类型的字段。
2、每个消息中可以包含0个或多个optional类型的字段。
3、repeated表示的字段可以包含0个或多个数据。
4、如果打算在原有消息协议中添加新的字段,同时还要保证老版本的程序能够正常读取或写入,那么对于新添加的字段必须是optional或repeated。道理非常简单,老版本程序无法读取或写入新增的required限定符的字段。

0 0
原创粉丝点击