当前位置:网站首页>protobuf 基本语法总结
protobuf 基本语法总结
2022-07-28 06:12:00 【litanyuan】
背景
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 ;
}

边栏推荐
- 两个链表的第一个公共节点——每日两题
- User mode vs kernel mode, process vs thread
- Elaborate on common mode interference and differential mode interference
- Synthesis of dna-ag2sqds DNA modified silver sulfide Ag2S quantum dots
- 谈谈DOM0,DOM1,DOM2,DOM3
- EMC问题的根源在哪?
- YOLO系列损失函数详解
- 任务管理器中,显示的CPU速度大于它的最大速度【主频】
- 深度学习基础宝典---激活函数、Batch Size、归一化
- flowable工作流所有业务概念
猜你喜欢

华为高级工程师---BGP路由过滤及社团属性

收藏 | 结合个人经验,我总结了这7点EMC相关知识

【干货】32个EMC标准电路分享!

快速搭建DMHS DM之间双向同步

再次出现用户净流失,大失颜面的中国移动推出超低价套餐争取用户

【着色器实现Negative反色效果_Shader效果第十一篇】

Dry goods | share an EMC actual case and rectification process

The cornerstone of EMC - complete knowledge of electromagnetic compatibility filtering!

2022年湖南工学院ACM集训第五次周测AD题题解

YOLO系列损失函数详解
随机推荐
【google】解决google浏览器不弹出账号密码保存框且无法保存登录信息问题
细说共模干扰和差模干扰
C语言犄角旮旯的知识之指针
(每日一题)——最长不含重复字符的子字符串
Discrimination coverage index / index coverage / Samsung index
和为s的两个数字——每日两题
DNA-Ag2SQDs脱氧核糖核酸DNA修饰硫化银Ag2S量子点的合成方法
[JVM optimization] online JVM tuning practice
【13】加法器:如何像搭乐高一样搭电路(上)?
The cornerstone of EMC - complete knowledge of electromagnetic compatibility filtering!
[solution] visual full link log tracking - log tracking system
DNA修饰贵金属纳米颗粒|DNA脱氧核糖核酸修饰金属钯Pd纳米颗粒PdNPS-DNA
EMC中的基石-电磁兼容滤波知识大全!
EMC整改方法集合
解析树形结构 js
Tutorial (7.0) 06. Zero trust network access ztna * forticlient EMS * Fortinet network security expert NSE 5
华为交换机拆解,学EMC基本操作
Niuke MySQL - SQL must know and know
【17】建立数据通路(上):指令+运算=CPU
JUC原子类: CAS, Unsafe、CAS缺点、ABA问题如何解决详解