概念
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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性