概念

protobuf 是 Google 公司提出的一种轻便高效的结构化数据存储格式,常用于结构化数据的序列化,具有语言无关、平台无关、可扩展性特性,常用于通讯协议、服务端数据交换场景

支持的类型

  • 数值型
    • int32, uint32, sint32, fixed32, sfixed32
    • int64, uint64, sint64, fixed64, sfixed64
    • float, double
    • 默认值:0
  • 布尔型
    • true
    • false
  • 字符型
    • string, 长度不可超过 232,且需是 UTF-8 编码
    • 默认值:空字符串
  • 字节型
    • bytes 可表示 byte 数组序列,长度不可超过 232
    • 默认值:空 byte 数组
  • 枚举型
    • enum,第一个值必须是 0
    • 默认值:0,枚举里定义的第一个枚举值

Tag

在 proto 文件中,tag 比较重要,用来标识字段的唯一性

数值范围:1 – 2^29-1

其中 19000 – 19999 之间的数是保留数,不可用

其中 1 – 15 只占用一个字节,应该用在频繁使用的字段上;16 – 2047 占用两个字节,可以用在不频繁使用的字段上

tag 只能出现 0 或 1 次,这是 proto3 的默认规则

关键词

  • syntax 声明 proto 文件的语言版本
  • option 定义 proto 或者 生成的代码的相关属性,如设置枚举可定义别名,命名空间
    • option allow_alias = true;
    • option csharp_namespace = ‘xxx’;
  • package proto 文件里面的 namespace
  • import 导入已定义的 proto 类型
  • message 定义一个消息
  • service 定义一个服务
  • repeated 定义数组
  • reserved 标记删除的 tag 或 字段名
    • reserved 10, 15 to 20, 100 to max;
    • reserved ‘field1’, ‘field2’;

注释

  • // 这行文字被注释了
  • /* 这里的文字被注释了 */

示例

message School {
    int32 id = 1;
    string name = 2;
    float size = 3;
    bytes image = 4;
    // int64 number = 5;
    bool is_important = 6;
    ClassType classType = 7;
    Date build_date = 8;

    reserved 5;
    reserved 'number';

    enum ClassType {
        option allow_alias = true;

        NOT_SPECIFIED = 0;
        LARGE = 1;
        SMALL = 2;

        BIG = 1;
    }
}

message Date {
    int32 year = 1;
    int32 month = 2;
    int32 day = 3;
}

原文地址:http://www.cnblogs.com/liujiangbo/p/16886124.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性