一文了解protobuf
创作时间:
作者:
@小白创作中心
一文了解protobuf
引用
CSDN
1.
https://m.blog.csdn.net/weixin_43855095/article/details/145676319
一、protobuf基本介绍
ProtoBuf(全称Protocol Buffer)是数据结构序列化和反序列化框架,它具有以下特点:
- 语言无关、平台无关:即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
- 高效:即比 XML 更小、更快、更为简单
- 扩展性、兼容性好:你可以更新数据结构,而不影响和破坏原有的旧程序
二、ProtoBuf快速上手
2.1、创建 .proto 文件
- 文件名字通常使用小写字母,复杂名字采用下划线分割
- zzx_blood_data.proto
2.2、向文件添加注释
- 可使用 // 或者 /* … */
- //以下是注释案例
三、语法介绍
3.1 基本结构说明
- 指定语法,:使用 proto3 语法 ,未指定则使用proto2
- syntax = “proto3”;
- package 声明符:声明一个唯一的包名
- package com.yasee.cdms.bio.proto;
- 定义消息(message)
- 类似与一个对象名,内部用于定义对象结构体
- 对象内部字段定义
- required string version = 1; //版本
- optional int32 unit = 2;
- repeated ItemData iList = 3;//插入集合
3.2 字段定义规则详解
- 限定符
- required:消息体中必填字段,不设置会导致编解码异常。一般不填就认为是必填字段了。
- optional:消息体中可选字段。
- repeated:消息体中可重复字段,重复的值的顺序会被保留。
- 字段映射
- 标识号
- 在消息体的定义中,每个字段都必须要有一个唯一的标识号,标识号是[0.2^29-1]范围内的一个整数。
- 其中 19000 ~ 19999 不可用
- 19000 ~ 19999 不可用是因为:在 Protobuf 协议的实现中,对这些数进行了预留。如果非要在.proto文件中使用这些预留标识号,例如将 name 字段的编号设置为19000,编译时就会报警。
- 范围为 1 ~ 15 的字段编号需要一个字节进行编码, 16 ~ 2047 内的数字需要两个字节进行编码。编码后的字节不仅只包含了编号,还包含了字段类型。所以 1 ~ 15 要用来标记出现非常频繁的字段,要为将来有可能添加的、频繁出现的字段预留一些出来。
3.3、案例demo
//指定语法, 法使用 proto3 语法 ,未指定则使用proto2
syntax = "proto3";
option java_multiple_files = true;
//proto 文件包名
package com.yasee.cdms.bio.proto;
//生成 proto 文件所在包路径,一般来说是和文件包名一致就可以
option java_package = "com.zzx.proto";
//生成 proto 的文件名
option java_outer_classname = "zzx_blood_data";
//创建一个 data 对象
// data:消息类型命名;规范:使用驼峰命名法,首字母大写。
message data {
//自身属性
required string version = 1; //版本
//对象
repeated ItemData iList = 2;//插入集合
repeated ItemData uList = 3;//修改集合
repeated ItemData dList = 4;//删除集合
}
message ItemData {
required int32 dataType = 1;
optional BloodGlucose bloodGlucose = 2; // 1=血糖数据 BloodGlucose
}
// 基本检测数据 对象
message BaseTestData {
required int64 userId = 1; //用户ID
required int64 id = 2; //数据库表主键id
required int64 testTime = 3; //测试时间
optional int32 unit = 4; //单位
optional string remark = 5; //备注
}
// 血糖
message BloodGlucose {
required BaseTestData baseTestData = 1;
required int32 period = 2;
required float result = 3;
optional string paperCode = 4;
optional float temp = 5;
}
四、生成文件
4.1、直接命令生成序列化文件
- protoc --go_out=./ .\user.proto
4.2、IDEA工具引入依赖生成序列化文件
- idea市场下载插件
- 安装后重启idea,工具栏看到如下两个配置
- 官网下载protobuf 编译工具
- https://github.com/protocolbuffers/protobuf/releases
- 下载完成后,回到上一步工具栏,点击Configure GenProtobuf
- 配置刚下载的编译工具地址
- 生成编译文件
- 创建的.proto文件,右键选项,生成即可
热门推荐
告别发芽困扰,教你5种实用大蒜储存法
冰箱保鲜大蒜,三个月依旧脆嫩
大蒜保存有妙招,这些方法让你告别“发芽困扰”
赴泰旅游遇安全疑虑,退订率超10%将致10亿损失
曼谷沙美岛六日游:春节泰国旅游攻略
无道具也能嗨翻天!这些团建小游戏让团队凝聚力爆棚!
长途自驾必备:6大维修工具助你轻松应对1000公里旅程
三尖瓣反流的药物治疗方案及注意事项
厦门铁路文化公园:4.5公里废弃铁轨变身网红打卡地
滁州出发四天自驾:穿越皖鄂川闽四省的黄金路线
浓香型白酒的多重价值:从餐桌到养生的文化传承
白酒饮用指南:量、温、选酒与搭配全解析
羊杂汤这样做最好:精选配菜与烹饪秘诀
电流“走捷径”致短路:原因、后果与防范指南
家庭电路短路处理指南:从自查到专业维修
电流“抄近道”致短路,四招教你远离用电危险
从生宣到熟宣:宣纸的分类、鉴别与使用全攻略
硬件电路设计全流程解析:从需求分析到工艺文件处理
品牌观察|县域经济发展为什么需要区域品牌?
彩云之南:云南旅游歌曲全攻略
治疗耳鸣、耳聋的5个西药,7个中成药,一文总结
研究:产后体重滞留与多种疾病风险相关,三管齐下可预防
地理“瓶颈”遇上返乡潮:宁洛高速滁州段堵车之困
芋头烧鸡:传统美味,营养与口味的双重盛宴
「芋」见你真好!减肥控糖吃芋头、芋头4大功效热量一次看
揭秘土豆煮透的奥秘,时间、火候与完美口感的艺术
窒息预防小贴士,这些细节关乎生命安全
应急救援员教你窒息急救法
潮州沙场窒息事件引发安全管理反思
窒息急救指南:关键时刻救命技巧