netty之decoder
转载自:https://blog.csdn.net/jzft_nuosu/article/details/80341018
netty的handler和decoder中的channelRead和decode方法的执行理解
对于ChannelInboundHandlerAdapter中的channelRead(ChannelHandlerContext ctx, Object msg),如果在这个处理器之前还没有做任何处理,则msg的类型为io.netty.buffer.PooledUnsafeDirectByteBuf,当你读取数据的时候如果读取的字节数超过了msg中writerIndex则程序将直接报异常,当你正常读取其中的数据后必须要强制执行ctx.fireChannelRead(msg)才能通知下一个处理器进行处理,还有一个问题就是,如果下一个处理器所需要的数据是msg的全部数据,则必须调用msg.resetReaderIndex()将读索引重置到开始位置。
对于ReplayingDecoder中的decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out),in的类型是io.netty.handler.codec.ReplayingDecoderByteBuf,当你读取数据的时候如果读取的字节数超过了in中writerIndex则程序不报任何错误,而是过了一段时间又重新执行该方法一遍,这是因为ReplayingDecoderByteBuf是一个特殊的ByteBuf,当它读取超出最大索引的时候会抛出RELAY异常,然后被处理,证明数据还未全部到达,将再次通知执行,但是这个地方如果后续没有数据进来的话好像是通过定时来进入的,应该没什么意义,而且最终会重复进入两次,总共执行三次。
---------------------
作者:jzft
来源:CSDN
原文:https://blog.csdn.net/jzft_nuosu/article/details/80341018
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- 常见端口 HTTP代码
- Jmeter分布式测试搭建(二)
- 【Linux】LAMP环境的搭建
- Angular2 从0到1 (二)
- n个骰子的点数
- (转)用JS判断ckeditor3.6版本编辑器内容为空的方法
- iOS——文件操作NSFileManager (创建、删除,复制,粘贴)
- Java基础知识强化63:Arrays工具类之方法源码解析
- NullSafe 的原理
- [SCOI2010]幸运数字 [容斥原理 dfs]
- python第六篇文件处理类型
- java导出csv格式文件
- EF 下如何更新数据表数据
- Linux教程--基础命令
- day 37-8 关于mysql 的增 删 改 查 及联合列表
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
- linux socket编程示例
- 51nod 1042数字0-9的数量
- HTTP/1.0中,状态码200 301 304 403 404 500的含义?
- 如何使用 sqlite3 访问 Android 手机的数据库