最近在工作中接触到了Google的.proto文件编写,因此对其进行简单的汇总。
protocol buffer 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
Protocol Buffer 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML
- 更小(3 ~ 10倍)
- 更快(20 ~ 100倍)
- 更为简单
- 自动生成更易于以编程方式使用的数据访问类
你指定的 message 字段可以是下面几种情况之一:
- required: 格式良好的 message 必须包含该字段一次。
- optional: 格式良好的 message 可以包含该字段零次或一次(不超过一次)。
- repeated: 该字段可以在格式良好的消息中重复任意多次(包括零)。其中重复值的顺序会被保留。
注:在 proto3 中已经为兼容性彻底抛弃 required。
分配字段编号
如你所见,message 定义中的每个字段都有唯一编号。这些数字以 message 二进制格式 标识你的字段,并且一旦你的 message 被使用,这些编号就无法再更改。请注意,1 到 15 范围内的字段编号需要一个字节进行编码,编码结果将同时包含编号和类型(你可以在 Protocol Buffer 编码 中找到更多相关信息)。16 到 2047 范围内的字段编号占用两个字节。因此,你应该为非常频繁出现的 message 元素保留字段编号 1 到 15。请记住为将来可能添加的常用元素预留出一些空间。
例如,如果要定义与搜索请求相应的搜索回复 message - SearchResponse message,则可以将其添加到相同的 .proto:
可以在单个 .proto 文件中定义多种 message 类型。
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page