protobuf中的类型
Protocol Buffers(protobuf): Google 开发的一种数据序列化协议(与 XML、JSON 类似)
https://blog.csdn.net/Nice_W/article/details/135650703
标量数据类型
.proto type | Notes | C++ type |
---|---|---|
double | 无 | double |
float | 无 | float |
int32 | 使用变长编码.负数的编码效率较低,若字段可能为负值,应用 sint32 代替 | int32 |
int64 | 使用变长编码.负数的编码效率较低,若字段可能为负值,应用 sint64 代替 | int64 |
uint32 | 使用变长编码 | uint32 |
uint64 | 使用变长编码 | uint64 |
sint32 | 使用变长编码,符号整型.负值的编码效率高于常规的 int32 类型 | int32 |
sint64 | 使用变长编码,符号整型.负值的编码效率高于常规的 int64 类型 | int64 |
fixed32 | 定长4字节,若值常大于 2^28 则会比 uint32 更高效 | uint32 |
fixed64 | 定长8字节,若值常大于 2^56 则会比 uint64 更高效 | uint64 |
sfixed32 | 定长4字节 | int32 |
sfixed64 | 定长8字节 | int64 |
bool | 无 | bool |
string | 包含 UTF-8 和 ASCII 编码的字符串,长度不能超过 2^32 | string |
bytes | 可包含任意的字节序列但长度不能超过 2^32 | string |
repeated 关键字
在 Protocol Buffers(ProtoBuf)中,repeated
关键字用于表示一个字段可以包含零个、一个或多个元素。这相当于在大多数编程语言中的数组或列表的概念。使用 repeated
关键字定义的字段可以包含多个同类型的值。
表示字段可以包含[0, N]个元素,特性与optional一样,可以看做一个数组
proto3”仅仅支持repeated字段修饰,如果使用不支required,optional
required 关键字
表示必须字段,即发送方在发送消息的时候必须设置该字段的值,接收方接受时必须识别该字段的值
proto3”仅仅支持repeated字段修饰,如果使用不支required,optional
optional 关键字
可选字段。发送方可设置可不设置,接收方能识别就识别,不能识别就忽略。
proto3”仅仅支持repeated字段修饰,如果使用不支required,optional
oneof 关键字
oneof 是 Protocol Buffers (Proto) 语言中的一个关键特性,它允许你在定义数据结构时,在同一个消息中定义一组字段,但是每次只能设置其中的一个字段。这意味着如果你在一个 oneof 组内设置了多个字段,最后设置的字段会覆盖之前设置的字段值。oneof 的这种特性使得数据结构更加灵活,同时也可以用来节省存储空间,因为只有一个字段会被存储。
oneof有如下的语法规定:
- oneof内的字段和上一层的字段属于同一级别,因此不能重名
- oneof内的字段不能用
Repeated
修饰 - oneof内同时只能有一个字段被设置。如果oneof字段被重复设置,则以最后设置的结果为准
google.protobuf.Empty
多用组合、少用继承
基于接口而非实现进行编程