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 的这种特性使得数据结构更加灵活,同时也可以用来节省存储空间,因为只有一个字段会被存储。

【Protobuf速成指南】oneof类型的使用

oneof有如下的语法规定:

  1. oneof内的字段和上一层的字段属于同一级别,因此不能重名
  2. oneof内的字段不能用 Repeated 修饰
  3. oneof内同时只能有一个字段被设置。如果oneof字段被重复设置,则以最后设置的结果为准

google.protobuf.Empty

posted @ 2024-11-29 17:05  guanyubo  阅读(50)  评论(0编辑  收藏  举报