问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文了解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文件,右键选项,生成即可
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号