Protobuf使用手册
来源:互联网 发布:python help 函数 编辑:程序博客网 时间:2024/06/07 00:00
Protobuf使用手册
选择版本
syntax 声明可以选择protobuf的编译器版本(v2和v3)
syntax="proto2";选择2版本,各个字段必须明确标注编号以确定序列化后二进制数据字段的位置
syntax="proto3";选择3版本,没有强制使用字段编号
syntax="proto2";选择2版本,各个字段必须明确标注编号以确定序列化后二进制数据字段的位置
syntax="proto3";选择3版本,没有强制使用字段编号
字段修饰符
required
对于required的字段而言,编号初值是必须要提供的,否则字段的便是未初始化的
对于修饰符为required的字段,序列化的时候必须给予初始化,否则程序运行会异常
optional
对于optional的字段而言,如果未进行初始化,那么一个默认值将赋予该字段编号
也可以指定默认值,如示例所示.
repeated
对于repeated的字段而言,该字段可以重复多个,即每个编码单元可能有多个该字段
在高级语言里面,我们可以通过数组来实现,而在proto定义文件中可以使用repeated来修饰,从而达到相同目的。
当然,出现0次也是包含在内的。
对于required的字段而言,编号初值是必须要提供的,否则字段的便是未初始化的
对于修饰符为required的字段,序列化的时候必须给予初始化,否则程序运行会异常
optional
对于optional的字段而言,如果未进行初始化,那么一个默认值将赋予该字段编号
也可以指定默认值,如示例所示.
repeated
对于repeated的字段而言,该字段可以重复多个,即每个编码单元可能有多个该字段
在高级语言里面,我们可以通过数组来实现,而在proto定义文件中可以使用repeated来修饰,从而达到相同目的。
当然,出现0次也是包含在内的。
字段类型
字段类型对应二进制类型
完整示例
1234567891011121314151617181920212223242526
message IntType {optional int32 a_i32 = 1;optional int64 b_i64 = 2;optional sint32 c_s32 = 3;optional sint64 d_s64 = 4;optional sfixed32 e_sf32 = 5;optional sfixed64 f_sf64 = 6;}message UIntType {optional uint32 a_u32 = 1;optional uint64 b_u64 = 2;optional fixed32 c_f32 = 3;optional fixed64 d_f64 = 4;}message FType{optional float a_f = 1;optional double b_d = 2;optional bool c_b = 3;}message BSType{optional string a_s = 1;repeated bytes b_bs = 2;}
嵌套与引用
1.嵌套定义
message定义中可以嵌套定义message,enum
嵌套定义的单元外部可见,引用路径由外到内逐层引用
2.引用
定义package相当于C++的namespace,外部引用时需要package名
引用外部message定义,只需要import外部proto文件即可使用
引用使用相对路径,生成文件时protobuf可以自动处理
完整示例
message定义中可以嵌套定义message,enum
嵌套定义的单元外部可见,引用路径由外到内逐层引用
2.引用
定义package相当于C++的namespace,外部引用时需要package名
引用外部message定义,只需要import外部proto文件即可使用
引用使用相对路径,生成文件时protobuf可以自动处理
完整示例
12345678910111213141516171819202122232425262728
//user.protosyntax="proto2“;package user;message User{ required sfixed64 uid = 1; enum PhoneType{ NONE = 1; HOME = 2; MOBILE = 3; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = MOBILE]; } repeated PhoneNumber phone = 2; optional sfixed32 age = 3;}message Admin { required sfixed64 uid = 1; optional User.PhoneNumber phone = 2;}由协议生成C++文件:protoc --cpp_out=${DIR} proto-file...
多个协议文件依赖关系:protoc --cpp_out=${DIR} base-proto-file deliver-proto-file...
依赖问题按相对路径处理import即可解决
http://linghutf.github.io/2016/06/08/protobuf/
0 0
- Protobuf使用手册
- protobuf
- ProtoBuf
- protobuf
- protobuf
- protobuf
- Protobuf
- protobuf
- Protobuf
- protobuf
- protobuf
- protobuf
- protobuf
- protobuf
- protobuf
- ProtoBuf
- 【Protobuf】
- 【Protobuf】
- 数据结构中几种排序算法的整理
- 如何分辨IP地址的类型
- Binary Tree Level Order Traversal II
- 课程设计:小学生考试系统
- RAM ROM and Flash
- Protobuf使用手册
- js文章网站集锦
- 子集和问题
- 菜单对号标记
- 【File】——查找文件夹下所有文件的名称
- redis 安装
- 服务器总是被攻击
- AVRO : 常用知识总结
- Android design包自定义tablayout的底部导航栏