message、属性后面的数字等:Protoc代码解释

先上重点:

在proto3枚举值第一个必须是0,其他的随意
在proto2,每个属性前必须加required,optional,repeated
该数字只要不重复,可以定义为任何数字,不需要总是从1或者0开始

这个数字表示在序列化数组里面的顺序

 

然后是proto跟java类型对比图

 

最后是一段proto代码:

message LogonReqMessage {

required int64 acctID = 1;

required string passwd = 2

}

syntax = "proto3";

enum Sex
{
    MALE = 0;
    FEMALE = 1;
}

message Student
{
    int32 number = 1;
    string name = 2;
    Sex sex = 3;
    string hobby = 4;
    string skill = 5;
    repeated int32 array = 6 [packed=true];
}

这里将给出以上消息定义的关键性说明。

1. message是消息定义的关键字,等同于C++中的struct/class,或是Java中的class。

2. LogonReqMessage为消息的名字,等同于结构体名或类名。

3. required前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值。与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和repeated,
带有这两种限定符的消息字段则没有required字段这样的限制。相比于optional,repeated主要用于表示数组字段。具体的使用方式在后面的用例中均会一一列出。

4. int64和string分别表示长整型和字符串型的消息字段,在Protocol Buffer中存在一张类型对照表,即Protocol Buffer中的数据类型与其他编程语言(C++/Java)中所用类型的对照。
该对照表中还将给出在不同的数据场景下,哪种类型更为高效。该对照表将在后面给出。

5. acctID和passwd分别表示消息字段名,等同于Java中的域变量名,或是C++中的成员变量名。

 

6. 标签数字1和2则表示不同的字段在序列化后的二进制数据中的布局位置。在该例中,passwd字段编码后的数据一定位于acctID之后。需要注意的是该值在同一message中不能重复。
另外,对于Protocol Buffer而言,标签值为1到15的字段在编码时可以得到优化,即标签值和类型信息仅占有一个byte,标签范围是16到2047的将占有两个bytes,
而Protocol Buffer可以支持的字段数量则为2的29次方减一。有鉴于此,我们在设计消息结构时,可以尽可能考虑让repeated类型的字段标签位于1到15之间,这样便可以有效的节省编码后的字节数量。

在proto3枚举值第一个必须是0,其他的随意
在proto2,每个属性前必须加required,optional,repeated
该数字只要不重复,可以定义为任何数字,不需要总是从1或者0开始

这个数字表示在序列化数组里面的顺序

 

7.repeated int32 array = 6 [packed=true];优化之前的版本对一些int32数据进行字节对齐。// 如果该选项在一个整型基本类型上被设置为真,则采用更紧凑的编码方式(不会对数值造成损失)
// 在2.3.0版本前,解析器将会忽略 非期望的包装值。因此,它不可能在 不破坏现有框架的兼容性上 而 改变压缩格式。
// 在2.3.0之后,这种改变将是安全的,解析器能够接受上述两种格式。

optional int32 old_field = 6 [deprecated=true];
// 作用:判断该字段是否已经被弃用
// 作用同 在java中的注解@Deprecated


-----------------------------------

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值