第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

從零開始學netty——為何重寫方法不一樣

標簽:
Java

从零开始学netty——第一个netty程序
从零开始学netty——认识decoder

相信大家看了decoder部分的时候肯定有点怪异,尤其是发现重写的方法是channelRead0。方法上还带了数字,完全不如channelRead好理解,下面的内容就是解答这个疑惑的。

继承类的差异

第一个程序继承的是ChannelInboundHandlerAdapter类,第二个程序是继承的是SimpleChannelInboundHandler,SimpleChannelInboundHandler是有泛型参数的。可以指定一个具体的类型参数,通过decoder配合使用,非常方便。ChannelInboundHandlerAdapter则是直接操作byte数组的。

类的关系
 ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelInboundHandler
 SimpleChannelInboundHandler<I> extends ChannelInboundHandlerAdapter

上图就是两个类的声明,SimpleChannelInboundHandler是继承ChannelInboundHandlerAdapter的。也就是说SimpleChannelInboundHandler也拥有ChannelInboundHandlerAdapter的方法。

channelRead的重写
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        boolean release = true;
        try {
            if (acceptInboundMessage(msg)) {//类型匹配
                I imsg = (I) msg;
                channelRead0(ctx, imsg);
            } else {
                release = false;
                ctx.fireChannelRead(msg);
            }
        } finally {
            if (autoRelease && release) {
                ReferenceCountUtil.release(msg);//释放引用
            }
        }
    }

SimpleChannelInboundHandler的channelRead相比SimpleChannelInboundHandler而言,主要做了类型匹配以及用完之后释放指向保存该消息的 ByteBuf 的内存引用。

ChannelInboundHandlerAdapter 的好处

相比之下,ChannelInboundHandlerAdapter 好像一无是处,毕竟他要自己处理资源的释放,例如如下的调用

    buf.release();

如果说channelRead都是同步操作的话,SimpleChannelInboundHandler是不错的选择,如果操作是异步的话,那他的逻辑就有点麻烦了,例如你把数据交给另外的线程处理了,还没处理就会释放了 。这里必须说明一个问题,他的回收和jvm的垃圾回收还不完全是一回事。netty是自己做了引用计数的操作。

        buf.refCnt();

通过上面的api就可以获取到计数的个数。具体的引用计数的部分,不知道也不影响netty的学习,这个点后面具体再说。ChannelInboundHandlerAdapter 处理自由的优点也就提现出来了,可以更好的处理更多的特定场景。

小总结

SimpleChannelInboundHandler的好处是可以处理不同的类型对象,并且可以做释放。ChannelInboundHandlerAdapter 的好处则是更自由,在异步的场景下更适合。

點擊查看更多內(nèi)容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消