Netty源码分析(四) MessageToByteEncoder

下面来分析Netty的MessageToByteEncoder,大家都知道,在网络中通信需要将对象序列化成字节数组,发送出去,而到达接收端后就需要把字节数组反序列化成对象,就需要解码。下面就来说说Netty里的编码器MessageToByteEncoder。
MessageToByteEncoder继承自ChannelOutboundHandlerAdapter,内部有一个类型匹配器TypeParameterMatcher,下面来看一下write方法

public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
    ByteBuf buf = null;
    try {
        // 判断是否为匹配的消息
        if (acceptOutboundMessage(msg)) {
            @SuppressWarnings("unchecked")
            I cast = (I) msg;
            // 申请 buf
            buf = allocateBuffer(ctx, cast, preferDirect);
            // 编码
            try {
                encode(ctx, cast, buf);
            } finally {
                // 释放 msg
                ReferenceCountUtil.release(cast);
            }

            // buf 可读,说明有编码到数据
            if (buf.isReadable()) {
                // 写入 buf 到下一个节点
                ctx.write(buf, promise);
            } else {
                // 释放 buf
                buf.release();
                // 写入 EMPTY_BUFFER 到下一个节点,为了 promise 的回调
                ctx.write(Unpooled.EMPTY_BUFFER, promise);
            }

            // 置空 buf
            buf = null;
        } else {
            // 提交 write 事件给下一个节点
            ctx.write(msg, promise);
        }
    } catch (EncoderException e) {
        throw e;
    } catch (Throwable e) {
        throw new EncoderException(e);
    } finally {
        // 释放 buf
        if (buf != null) {
            buf.release();
        }
    }
}

其实很简单,就是先申请内存,然后调用encode方法进行编码,调用ChannelHandlerContext的write方法写入ByteBuf中,然后释放ByteBuf,并将事件传递给下一个节点。
MessageToByteEncoder的分析就到这里了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 该文章为转载,原文章请点击 1. 背景 1.1. Netty 3.X系列版本现状 根据对Netty社区部分用户的调...
    Pramyness阅读 6,164评论 1 14
  • netty常用API学习 netty简介 Netty是基于Java NIO的网络应用框架. Netty是一个NIO...
    花丶小伟阅读 11,223评论 0 20
  • 转载自:http://www.cnblogs.com/rainy-shurun/p/5213086.html Ne...
    达微阅读 7,338评论 0 14
  • 儿时那充满荆棘的山路 终有人为你穿起混凝土的外衣 犹记曾经摘果砍柴的乐趣 现在我只能装作高雅的静静...
    峰峦之上阅读 1,675评论 0 1
  • Hey,我是翻天,好久不见,见字如面,想你们了。 当初创建【翻天】这个公众号,说好每晚陪你们入睡道一句晚安,我...
    我是翻天阅读 3,544评论 0 0

友情链接更多精彩内容