Netty MessageDecoder decode详解

来源:互联网 发布:linux发行版排行 2017 编辑:程序博客网 时间:2024/06/06 05:44

首先看下 Netty MessageDecoder 类:


public class MessageDecoder extends FrameDecoder {     @Override    protected Object decode(            ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {        if (buffer.readableBytes() < 4) {            return null;//(1)        }        int dataLength = buffer.getInt(buffer.readerIndex());        if (buffer.readableBytes() < dataLength + 4) {            return null;//(2)        }         buffer.skipBytes(4);//(3)        byte[] decoded = new byte[dataLength];        buffer.readBytes(decoded);        String msg = new String(decoded);//(4)        return msg;    }}

MessageDecoder继承自FrameDecoder,FrameDecoder是Netty codec包中的辅助类,它是个ChannelUpstreamHandler,decode方法是FrameDecoder子类需要实现的。在上面的代码中,有:

(1)检查ChannelBuffer中的字节数,如果ChannelBuffer可读的字节数少于4,则返回null等待下次读事件。
(2)继续检查ChannelBuffer中的字节数,如果ChannelBuffer可读的字节数少于dataLength + 4,则返回null等待下次读事件。
(3)越过dataLength的字节。
(4)构造解码的字符串返回。


0 0
原创粉丝点击