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

netty源码:(40)ReplayingDecoder

在这里插入图片描述

ReplayingDecoder是ByteToMessageDecoder的子类,我们继承这个类时,也要实现decode方法,示例如下:

package cn.edu.tju;import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;import java.nio.charset.Charset;
import java.util.List;public class MyLongReplayingDecoder extends ReplayingDecoder<Void> {@Overrideprotected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {int readIndex = in.readerIndex();int writerIndex = in.writerIndex();int readableBytes = in.readableBytes();long result = in.readLong();out.add(result);}
}

在从in中读取数据(readLong)时,不需要判断所读取的字节是否够用,不会报错,会等到字节够用了才返回。
在这里插入图片描述
上述代码用两种方式读取一条消息,消息分为消息头(定义消息体的长度)和消息体两部分。
第一种方式是使用普通的ByteToMessageDecoder,需要在读取之前判断ByteBuf中是否有足够的字节。
第二种方式使用ReplayingDecoder,读取之前不需要判断ByteBuf中是否有足够的字节,具体的实现原理是:当要读的字节不够时,抛出一个错误,捕获这个错误的时候重置readerIndex,然后进行下一次尝试,实质上就是一种重试机制。

http://www.lryc.cn/news/270764.html

相关文章:

  • Apache Doris (五十五): Doris Join类型 - Colocation Join
  • 计算机组成原理复习7
  • python使用openpyxl操作excel
  • 使用keepalived时虚拟IP漂移注意事项
  • 32阵元 MVDR和DREC DOA估计波束方向图对比
  • OpenCV-11颜色通道的分离与合并
  • 从0到1入门C++编程——01 C++基础知识
  • C#编程-编写和执行C#程序2
  • Day02-ES6
  • 2023年12月记录内容管理
  • 【测试基础】构造测试数据之 MySQL 篇
  • 基于单片机的语音识别自动避障小车(论文+源码)
  • 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①
  • 【信息安全原理】——入侵检测与网络欺骗(学习笔记)
  • JVM GC 算法原理概述
  • 【数值分析】LU分解解Ax=b,matlab自己编程实现
  • 华为HCIE-Datacom课程介绍
  • QT(C++)-QTableWight添加行和删除空行
  • 软件测试/测试开发丨Python 面向对象编程思想
  • 一次降低进程IO延迟的性能优化实践——基于block层bfq调度器
  • C语言易错知识点十(指针(the final))
  • React 18 新增的钩子函数
  • 安装与部署Hadoop
  • MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)
  • 循环生成对抗网络(CycleGAN)
  • 数组--53.最大子数组和/medium
  • centos 编译安装 python 和 openssl
  • 【nodejs】前后端身份认证
  • 数据结构【线性表篇】(三)
  • Python装饰器的专业解释