一、文件名:*.proto
二、引用其他PB文件:
import "myprojce/other_protos.proto";
三、文件内容:
1.消息类型
message msgName{
require string query=1;
optional int32 page_number=2; }
说明:
1)一个.proto文件中可以定义多个message类型。
2)同时,如果1个.proto文件定义了多个具有不同依赖的message,会导致依赖膨胀;建议每个文件包含尽可能少的message。
2.字段类型
3.字段序号
message中的每个字段都有唯一序号。
作用:用于识别二进制message中的字段。
注意:
1)序号最小值为1,最大值为2^29-1(536870911);
2)不能使用19000~19999之间的数字,因为它们是为PB实现保留的。其中19000为FieldDescriptor::kFirstReservedNumber,19999为FieldDescriptor::kLastReservedNumber。如果使用了,PB编译器会报错;同样也不能重复使用已保留的字段序号。
3)消息已被使用后不能修改序号。
4)为频繁使用的消息成员保留字段号1~15。
编码格式:
1)1~15的序号用1个字节来编码(并包含字段序号和字段类型);
2)16~2017的序号暂用2个字节;
4.字段规则:
required:message中必有的字段
optional:message中可以有0或1个这个字段(不超过1个)
repeated:该字段在message中可以重复多次(包含0次),并保留重复值的顺序
注:该类型的字段编码效率不高,新代码需使用特殊选项[packed=true]来提高编码效率。例如:
repeated int32 samples = 4 [packed=true];
5.命名空间:
package pkg_name;
1)对于java,解析为包名;
2)对于c++,解析为namespace;
6.注释: