protobuf 基本语法总结

背景

protobuf 是一种跨平台的序列化结构数据的方法,可用于网络数据传输及存储。

本文对 protobuf 的基本使用语法进行整理和总结。

protobuf 中的关键字

①.syntax

用于指定协议版本号,没有指定则默认为 proto2 版本。

②.package

相等于 C++ 中的命名空间,为了防止名称冲突。

③.import

引入其他的 proto 文件,可以使用其他 proto 文件中定义的消息类型。

④.message

用于定义消息类型,相当于 C++ 中的 struct。

⑤.enum

用于定义枚举类型,相当于 C++ 中的 enum。

message 定义

①.概述

message 用于定义一个数据结构类型,是由一系列字段构成。

②.字段定义

每个字段的定义由一定的格式构成:

在这里插入图片描述

其中数据类型、字段名称、字段标识是必须定义的部分,字段默认值部分在 proto3 版本中不再支持。

字段修饰符

①.概述

字段修饰符用于指定字段的规则,非必须定义。

②.required

required 表示该字段是必须的,即发送方必须给该字段赋值,接收方也必须能够识别该字段。在 proto3 版本中不再支持该修饰符。

③.optional

optional 表示该字段是可选的,当解析的消息中不存在该值时会被指定为默认值,默认值也可以设置。在 proto3 版本中不再支持该修饰符。

optional int32 ID = 1 [default = 99]

④.singular

singular 表示该字段数量可以是 0 或者 1 个。该限制符不需定义,默认就是 singular 类型。

⑤.repeated

repeated 表示该字段数量可以是 0 或者 多 个。可以用来表示 C++ 中的 vector 类型。

基本数据类型

①.概述

protobuf 中支持的基本数据类型和 C++ 基本一致。

②.数据类型选择

如果数值是正数,根据值的范围大小使用 uint32 \ uint64 类型,但如果数值总是比较大的话选择 fixed32 \ fixed64;

如果数值可能是负数,根据值的范围大小使用 int32 \ int64 类型;但如果数值总是比较大的话选择 sfixed32 \ sfixed64;

float \ double 是固定使用 4 \ 8个字节编码,为提高效率可以把浮点数转为整形进行传输;

string 和 bytes 都是字符串,但 string 仅支持 UTF-8 或者 7-bit ASCII 编码的文本。

字段标识

①.概述

消息类型中的每个字段都必须有一个唯一的数字标识。

②.指定数字标识

字段标识即在字段定义中等号后面的数字。

message DemoMsg
{
  string name = 1;
  optional int32 id = 2 ;
}

protobuf 基本语法总结_第1张图片

你可能感兴趣的:(protobuf,java,c++,开发语言)