Google Protocol Buffer
目录
0 简介
Google 公司内部的混合语言数据标准,用于结构化数据序列化
用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式
1 编写 proto 文件
protobuf 的术语中,结构化数据被称为 Message
proto 文件:
proto 文件的文件名命名规则(最好这样): packageName.MessageName.proto
1 2 3 4 5 6 7 |
package lm; //避免名称冲突,可以给每个文件指定一个package名称 message helloworld { required int32 id = 1; // ID 用来标记该字段在序列化后的二进制数据中所在的field,不能改变 1到15范围的采用一个字节进行编码。所以通常将标签1到15用于频繁发生的消息字段。 required string str = 2; // str optional int32 opt = 3; //optional field } |
上例中,package 名字叫做 lm,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id,另一个为类型为 string 的成员 str。opt 是一个可选的成员,即消息中可以不包含该成员。
限定修饰符:
包含 required\optional\repeated
Required: 表示是一个必须字段,使用建议:除非确定某个字段一定会被设值,否则使用optional代替required???
Optional:表示是一个可选字段,可选对于发送方,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已
Repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值
2 编译proto 文件成目标语言
假设您的 proto 文件存放在 $SRC_DIR 下面,您也想把生成的文件放