protobuf3 从object-c角度说明数据类型
来源:互联网 发布:大数据实验室 编辑:程序博客网 时间:2024/05/29 17:29
定义一个基本消息类型
syntax = "proto3";message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3;}
- syntax = “proto3”:表示这是使用protobuf3的语法,不加这句默认使用protobuf2的语言.两者还是有不少差异的.
- message:包含一些基本数据,有点类似于C语言的结构体
- message的tag: filed采用key-value的方式编写.最后一个字段为唯一标识符,是用来定位filed的tag.tag的取值范围为
229 - 1, or 536,870,911,但是不要使用19000 到 19999,这段数字苹果自己保留的,用于未来实现.
消息组成
字段格式:限定符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]
限定符: singular,repeated
singular:一个正确定义的消息包含零或者1个该field.不超过1个
repeated:可以添加多个,相当于一个数组.排列顺序就是添加时的顺序.protobuf3对scalar数字类型的repeated限定默认都是packed的,这样可以节省很多空间,共用一个key,减少了key的占用.
Scalar Value Types
Enumations类型
enum EnumAllowingAlias { option allow_alias = true; UNKNOWN = 0; STARTED = 1; RUNNING = 1;}enum EnumNotAllowingAlias { UNKNOWN = 0; STARTED = 1; // RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside.}
- enum类型必须有一个明确是0的字段,这个一是为了和protobuf2兼容,而是使其有个默认值,protobuf3所有的数据都有默认值.
- 数据定义必须是int32的,如果是负数则使用sint32
- 数值想用的可以定义alias,否则会报错.
Any类型
用来表示序列化后的byte.需要导入google/protobuf/any.proto,同时filed定义必须是全局唯一的url的命名方式.目前用于runtime的库还在开发中.
Oneof
当有一个message有很多fileds,但只有一个会被赋值时,建议使用这个.如果一个filed被赋值,其他fileds都会被清空.
Map
如果想创建关联类型,可以使用该数据格式.其中的key可以是任意的整形或字符串,value可以是任意类型.
map<string, Project> projects = 3;
- map类型不可以是repeted
- 他是无序的
- 当从proto文件中转换时,会如果是字符串按照key的顺序,如果是数字会按照数字的顺序.
- 当解析或者合并map数据时,会使用最后一个key,但是从text转换到map时,如果有重复的key,会报错
参考
1.generate oc code
2.protobuf3 language
0 0
- protobuf3 从object-c角度说明数据类型
- protobuf3 从object-c角度学习数据编码
- object C 数据类型
- object C 数据类型
- Object-c 中的数据类型
- 【Object C】 基本数据类型
- Object-c 中的数据类型
- Object-C数据类型
- Object C 基本数据类型
- Object-c数据类型
- 从JDK源码角度看Object
- 从结构体角度浅谈C语言的数据类型和变量
- 从JVM角度阐述Java数据类型
- Object-c中的基本数据类型
- Object-C基本数据类型小结
- Object-c提供基本数据类型
- Object-C之基本数据类型
- 【iphone】Object-c 属性说明
- git分支管理策略
- 数据结构---线性表
- 生成图形(matplotlib.patches)
- 3.4_回文数
- 编译型语言和解释型语言的区别和优劣
- protobuf3 从object-c角度说明数据类型
- 在unity向量空间内绘制几何(3):通过三角形重心坐标计算任意形状网格上的随机坐标点
- 基于Basys 3的四位加法运算器
- 欢迎使用CSDN-markdown编辑器
- Laravel的json响应
- [译]c++ web编程:写出你的CGI程序
- JavaScript数据机构——集合
- 利用流式套接字实现文件传输.md
- 深入理解java接口和抽象类