• 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]
    
    • 1

    ④.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 ;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    GeoJson格式标准规范
    阿里云/腾讯云国际站代理:阿里云国际代理商账号代注册再降价,1个月内4家厂商跟进
    数据仓库相关
    【零基础学Java】第二十篇 包装类3(Math,Arrays,System,BigInteger,BigDecimal,日期)
    何为AutoML
    MySQL数据库(基础)——期末复习总结
    AWS Lambda从入门到精通
    用webwoker解决客服系统业务上的问题
    [推荐系统] 1. 深度学习与推荐系统
    【配电网重构】基于粒子群算法求解配电网重构问题附matlab代码
  • 原文地址:https://blog.csdn.net/lizhichao410/article/details/126012257