转载自: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
版权声明:本文为博主原创文章,转载请附上博文链接!

netty之decoder的更多相关文章

  1. netty的decoder encoder

    public class DelimiterBasedFrameDecoder extends ByteToMessageDecoder { 随便找了一个用字符串分割粘包的decoder,继承了Byt ...

  2. Netty Tutorial Part 1.5: On Channel Handlers and Channel Options [z]

    Intro: After some feedback on Part 1, and being prompted by some stackoverflow questions, I want to ...

  3. Netty 中的粘包和拆包

    Netty 底层是基于 TCP 协议来处理网络数据传输.我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 "包" 的概念呢? TCP是四层协议不负责数据逻 ...

  4. Netty编解码器(理论部分)

    背景知识 在了解Netty编解码之前,先回顾一下JAVA的编解码: 编码(Encode):在java中称之为序列化,把内存中易丢失的数据结构或对象状态转换成另一种可存储(存储到磁盘),可在网络间传输的 ...

  5. 为什么游戏公司的server不愿意微服务化?

    背景介绍 笔者最近去面试了家游戏公司(有上市).我问他,公司有没有做微服务架构的打算及考量?他很惊讶的,我没听说过微服务耶,你可以解释一下吗? 我大概说了,方便测试,方便维护,方便升级,服务之间松耦合 ...

  6. Netty自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  7. Netty入门3之----Decoder和Encoder

    ​ Netty强大的地方,是他能方便的实现自定义协议的网络传输.在上一篇文章中,通过使用Netty封装好的工具类,实现了简单的http服务器.在接下来的文章中,我们看看怎么使用他来搭建自定义协议的服务 ...

  8. 【Netty】使用解码器Decoder解决TCP粘包和拆包问题

    解码器Decoder和ChannelHandler的关系 netty的解码器通常是继承自ByteToMessageDecoder,而它又是继承自ChannelInboundHandlerAdapter ...

  9. Netty入门(六)Decoder(解码器)

    Netty 提供了丰富的解码器抽象基类,主要分为两类: 解码字节到消息(ByteToMessageDecoder 和 ReplayingDecoder) 解码消息到消息(MessageToMessag ...

随机推荐

  1. Java之Annotation(注解)——注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  2. Linux环境安装Docker入门教程

    安装 下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz 解压 tar -xvf ...

  3. nova 通过 python curl 创建虚拟机---keystone v3

    #! /bin/python #coding=utf- import urllib2 import json import requests # token post_url = 'http://10 ...

  4. nautilus pg autoscaler PG自动伸缩

    链接地址:https://ceph.io/rados/new-in-nautilus-pg-merging-and-autotuning/ [root@controller ~]# ceph osd ...

  5. Spring MVC 的运行流程

    1.用户发送请求到DispatcherServlet 2.DispatcherServlet调用处理器映射器(HanderMapping)找到处理器 3.处理器映射器(HanderMapping)返回 ...

  6. Windows Server 2012 R2 时间同步

    最近的项目两台服务器都是Windows Server 2012的系统,需要做时间同步,现在是一些从网上搜罗的步骤总结. 具体就是配置windows的注册表: 一.服务端配置 (NTP服务器,客户端将根 ...

  7. Xposed+X5使用

    1.Xposed 2.X5

  8. 新手学习seo写原创文章的方法

    http://www.wocaoseo.com/thread-102-1-1.html 前两天都是写自己公司克拉玛依电信公司年终活动和总结的事,今天继续学习seo技术,其实说难也难说容易也容易,关键的 ...

  9. 常被问到的八个 Java 面试题

    想要找到一份好的工作,面试是少不了的,可能你觉得自己技术应该不错了,但是面试却是一团糟.下面我收集了八个常常被问到的Java面试题.   1. 阐述 Java 7 和 Java 8 的区别. 实话说, ...

  10. 力扣Leetcode 11. 盛最多水的容器

    盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找 ...