当前位置: 首页 > news >正文

netty集成protobuf

一、准备工作,搭建环境
1、准备工作,需要在项目的根目录下新建文件夹,例如protobuf文件夹,并且在文件夹下放入编译器exe文件,如下图所示
在这里插入图片描述
2、安装maven依赖

<dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.6.1</version></dependency>

3、安装maven插件

<plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version> <!-- 使用最新版本 --><configuration><!--proto文件路径--><protoSourceRoot>${project.basedir}/protobuf</protoSourceRoot><!--目标路径--><outputDirectory>${project.build.sourceDirectory}</outputDirectory><!--设置是否在生成java文件之前清空outputDirectory的文件--><clearOutputDirectory>false</clearOutputDirectory><!--临时目录--><temporaryProtoFileDirectory>${project.build.directory}/protoc-temp</temporaryProtoFileDirectory><!--protoc 可执行文件路径--><protocExecutable>${project.basedir}/protobuf/protoc3.6.1.exe</protocExecutable></configuration><executions><execution><goals><!-- 编译 proto 文件生成基础消息类 --><goal>compile</goal><!-- 编译 proto 文件生成 gRPC 代码 --><goal>test-compile</goal></goals></execution></executions></plugin>

其中${project.basedir}/protobuf对应根路径下的protobuf文件夹
4、在根目录的protobuf文件夹文件夹下新建Msg.proto文件,内容如下

//版本
syntax="proto3";//包名
package com.example.netty_test.protocol;//选项,打包后POJO和构造器存储的位置,如果无此选项,则默认安装上面的package放
option java_package = "com.example.netty_test.protocol";//java外部类名
option java_outer_classname = "MsgProtos";message Msg {uint32 id=1;string content=2;
}

5、在项目src路径下可新建protocol包,用于生成.proto文件对应打包的POJO类和构造者的
在这里插入图片描述
6、maven idea 重新编译打包即可

二、操作ProtoBuf生成的POJO和构造器类
1、创建POJO对象

public static MsgProtos.Msg buildMsg(){MsgProtos.Msg.Builder personBuilder = MsgProtos.Msg.newBuilder();personBuilder.setId(1000);personBuilder.setContent("测试消息1234");MsgProtos.Msg message=personBuilder.build();return message;}

2、三种序列化和反序列化的方式

//方式1public static void serAndDesr1() {try {MsgProtos.Msg message=buildMsg();//序列化byte[] data=message.toByteArray();//反序列化MsgProtos.Msg inMsg=MsgProtos.Msg.parseFrom(data);}catch (Exception ex){ex.printStackTrace();}}//方式2public static void serAndDesr2(){try {MsgProtos.Msg message=buildMsg();//序列化到二进制码流ByteArrayOutputStream outputStream = new ByteArrayOutputStream();message.writeTo(outputStream);ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());//二进制码流反序列化成protoBuf对象MsgProtos.Msg inMsg=MsgProtos.Msg.parseFrom(inputStream);}catch (Exception ex){ex.printStackTrace();}}//方式3public static void serAndDesr3(){try {MsgProtos.Msg message=buildMsg();//序列化ByteArrayOutputStream outputStream = new ByteArrayOutputStream();message.writeDelimitedTo(outputStream);ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());//反序列化MsgProtos.Msg inMsg=MsgProtos.Msg.parseDelimitedFrom(inputStream);}catch (Exception ex){ex.printStackTrace();}}

文章转载自:

http://ryRejBE6.xnqjs.cn
http://IDawkf6B.xnqjs.cn
http://Rol2poto.xnqjs.cn
http://q0SDX9rL.xnqjs.cn
http://Rd69Cm7d.xnqjs.cn
http://7KaaMkkR.xnqjs.cn
http://3hNO83rE.xnqjs.cn
http://5Uu5gPcr.xnqjs.cn
http://NIGvMFoE.xnqjs.cn
http://hieXPmyo.xnqjs.cn
http://CaXXjHO0.xnqjs.cn
http://2uFDDYDl.xnqjs.cn
http://4NValYsZ.xnqjs.cn
http://qcaH8YQn.xnqjs.cn
http://eEOesZSe.xnqjs.cn
http://fp9R4FZg.xnqjs.cn
http://gWEEbcSQ.xnqjs.cn
http://TYlvj0aZ.xnqjs.cn
http://q93UaXND.xnqjs.cn
http://wLf69NKq.xnqjs.cn
http://xnmp6lb6.xnqjs.cn
http://zcMK6Mbc.xnqjs.cn
http://xYJWeMJL.xnqjs.cn
http://Q13cFuvl.xnqjs.cn
http://YSDUTBDm.xnqjs.cn
http://P4eFkr9D.xnqjs.cn
http://kCDhPnKO.xnqjs.cn
http://gWdSN2Hr.xnqjs.cn
http://CXvY6EOm.xnqjs.cn
http://Y8z85qzr.xnqjs.cn
http://www.dtcms.com/a/387226.html

相关文章:

  • ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
  • io_uring最简单的实例io_uring-test.c分析
  • 15.Linux时间管理
  • Linux 系统中的 Crond 服务:定时任务管理全指南
  • JDBC学习笔记
  • LoRA翻译
  • Linux 内存管理章节十五:内核内存的侦探工具集:深入Linux内存调试与检测机制
  • Mysql-主从复制与读写分离
  • bevformer 網絡結構
  • MySQL 基础与实战操作
  • 系统架构设计(二)
  • 【Day 58】Redis的部署
  • UVM验证工具--gvim
  • 《C++ spdlog高性能日志库快速上手》
  • 代码随想录学习(二)——二分查找
  • 【代码随想录day 27】 力扣 53. 最大子序和
  • Zynq开发实践(SDK之第一个纯PS工程)
  • 【Spring生态】Spring Cloud
  • HarmonyOS应用拉起系列(三):如何直接拉起腾讯/百度/高德地图进行导航
  • Redis的主从库与切片集群机制
  • 打工人日报#20250916
  • WASM逆向
  • 如何计算最大公约数和最小公倍数
  • 我们设计时间戳的更新时间的时候通常将字段类型设置为int或者bigint 这样能避免2038的问题吗
  • 超越“防被告”:2025跨境电商IPR战略赋能与品牌升值之道
  • Scrapy进阶:POST请求模拟登录实战与管道的使用
  • Zabbix 7.0 配置钉钉告警
  • 知识拓展-智能体和数字人
  • 飞牛NAS部署影视站MooncakeTV
  • yolov8 和OPENCV 自带的目标检测模型 对比