protobuf-2-语法与原理
一 protobuf简单使用
新建一个protobuf文件:hello.proto
syntax = "proto3";
message HelloRequest {
string name = 1;
int32 height = 2;
string email = 3;
repeated int32 weight = 4 [packed=true];
}
message TestResponse {
string text = 1;
}
说明:
- 上述示例中,创建了2个消息HelloRequest和TestResponse
- 消息中的值,1-4分别是键对应的数字id
二 protobuf语法
2.1 修饰前缀
- required:表示该字段有且只有1个,在3.0中该修饰符被移除
- optional:表示该字段可以是0或1个,后面可加default默认值,如果不加,使用默认值
- repeated:表示该字段可以是0到多个,packed=true 代表使用高效编码格式
注意:
- id在1-15之间编码只需要占一个字节,包括Filed数据类型和Filed对应数字id
- id在16-2047之间编码需要占两个字节,所以最常用的数据对应id要尽量小一些
- 使用required规则的时候要谨慎,因为以后结构若发生更改,这个Filed若被删除的话将可能导致兼容性的问题。
2.2 默认值
- strings:默认是一个空string
- bytes:默认是一个空的bytes
- bools:默认是false
- 数值类型:默认是0