zoukankan      html  css  js  c++  java
  • Protobuf 3学习笔记【语法篇】

    Profiler.proto

    package Profiler;

    message ProfilerDumperCtrl {

     int32 num = 1;

     int32 def_num = 2 [default=10];

     string str = 3;

    repeated string rep_str = 4;

    }

    包名:Profiler , 类似C++的命名空间,主要是用来防止不同消息类型的命名冲突

    使用protoc编译器将proto文件编译成C++代码后,该包名会被添加到每个生成的结构体名开头

    repeated: 字段属性为可重复字段,该字段可以包含0-n个元素,字段中的元素顺序被保留

    = 1, = 2 这些= 号的数字是标识号,对于一个message而言,每个字段必须有一个唯一的标识号

    这就是在解码中用来识别各个字段的

    下面来认识一下protobuf中定义的基本数据类型:

    proto类型 C++类型  备注
    double double  
    float float  
    int32 int32 使用可变长编码,值为负数时不够高效,这种情况请使用sint32
    int32  int32 使用可变长编码,值为负数时不够高效,这种情况请使用sint64
    sint32 int32 有符号的整形值,编码时比直接用int32高效
    sint64 int64 有符号的整形值,编码时比直接用int64高效
    uint32 uint32 使用可变长编码
    uint64 uint64 使用可变长编码
    fixed32 uint32 固定4字节编码,数值总是大于2的28次幂时,比uint32更高效
    fixed64 uint64 固定4字节编码,数值总是大于2的56次幂时,比uint64更高效
    sfixed32 int32  
    sfixed64 int64  
    bool bool  
    string string 字符串必须是UTF-8编码或者7bit ASCII编码的文本
    bytes string 包含任意顺序的字节数据

    枚举及其他消息类型

    enum statusE

    {

      statusInvalid = 0;

           OPEN = 1;

      CLOSED = 2;

    }

    如果需要引用的message是写在别的proto文件中,可以通过import "xx.proto" 来引入

    message也可以嵌套

    message Profiler {

      uint32  id = 1;

           message Dumper{

        uint32 id  = 1;

      }

      Dumper dump = 2;

    }

  • 相关阅读:
    Tomcat下HTTPS双向认证配置以及客户端调用案例
    Java本地运行中文正常,部署到Weblogic中文乱码
    gson 忽略掉某些字段不进行转换
    JavaScript中定义对象的四种方式
    使用CSS3实现超炫的Loading(加载)动画效果
    不要再使用JS框架了
    HTML5, CSS3, ES5新的web标准和浏览器支持一览 转
    js常用的事件对象
    jQuery用面向对象的思想来编写验证表单的插件
    五个值得尝试的前端开发工具
  • 原文地址:https://www.cnblogs.com/Arnold-Zhang/p/15354542.html
Copyright © 2011-2022 走看看