• Probuf定义详解


    定义一个消息类型

    1. message SearchRequst{ //搜素请求消息
    2. required string query = 1; //query字段,string类型,
    3. optional int32 page_number =2;
    4. optional int32 result_per_page = 3;
    5. //optional 可选; required 必须有
    6. }

    指定字段类型

    所有字段都是标量类型

    integers: page_number 和 result_per_page

    string:query

    还可以指定其他指定符合类型。

    枚举类型() 和其他消息类型

    指定字段规则

    消息字段三种规则:

    required:完整的消息内必须拥有此字段。此字段必须拥有(使用双方)

    optional:完整的消息内此字段可选,可拥有可以没有(使用双方可选)

    repeated:完整的消息内此字段的值可以拥有任意个,重复的值的次数会保存下来

    分配指定标签号

    每个字段都有一个唯一的数字标签,表示字段在二进制中的位置,使用过程不能更改

    标签号范围:

    1-15 一个字节标记

    16-2047 两个字节标记

    最小为1 最大为 2^29 -1 或者536870911 不能使用19000-19999的标签号

    .proto文件会生成什么?

    序列化到输出流

    输入流反序列化

    c++编译器会生成对应的.h和.cc文件 每个消息都有独立的操作类

    java编译器会生成一个.java文件和一个操作类,此操作类所有消息类型共有,使用一个特有的Builder类为每个消息类型实例化

    标量值类型

    一个消息的字段如果使用标量可使之为以下类型-这个表格显示了在.proto文件内可以指定的类型与自动生成的相对类型

     

    java的标量值类型: float,int,long,boolean,string ,unicode

    optional 字段与其默认值

    消息中被optional标识的字段不存在,会被解析为其相对应的字段设置为其字段的默认值

    1、字符串:空字符串

    2、bool:false

    3、数字类型:0

    4、枚举类型:第一个枚举类型

    枚举值

    1. message SearchRequst{ //搜素请求消息
    2. required string query = 1; //query字段,string类型,
    3. optional int32 page_number =2;
    4. optional int32 result_per_page = 3 [default = 10];
    5. enum Corpus{
    6. UNIVERSAL = 0;
    7. WEB = 1;
    8. IMAGES =2 ;
    9. LOCAL = 3;
    10. PRODUCTS = 4;
    11. VIDEO = 5;
    12. }
    13. optional Corpus corpus = 4 [default = UNIVERSAL];//指定枚举类型与其可能的值
    14. //optional 可选; required 必须有
    15. }

  • 相关阅读:
    使用文本编辑器解决Word文档加密后忘记密码问题
    Renesas:如何指定段(地址)存放数据
    WPF/C#:如何显示具有层级关系的数据
    ClickHouse架构原理-初探
    【LeetCode每日一题】——136.只出现一次的数字
    【Maven学习】3.4 实验四:创建 Maven 版的 Web 工程
    Qt学习总结之QFileDialog
    LoRa和LoRaWAN有什么区别?工业网关能用吗?
    java计算机毕业设计高校共享机房管理系统的设计与实现源码+系统+lw文档+mysql数据库+部署
    python数据结构与算法-06_算法分析
  • 原文地址:https://blog.csdn.net/ou775968876/article/details/127431632