netty 源码分析之(五)pipeline&ChannelHandler
}
2.DelimiterBasedFrameDecoder,指定分隔符的decoder
基于分隔符(可以多个,以最前面的为准)的解码器,可以指定最大长度
假设指定\n?为分隔符,最大长度100,
3.LengthFieldBasedFrameDecoder
基于长度的解码器,比如”长度+内容“,主要是下面4个属性
lengthFieldOffset???=?0 在某些协议可能会以固定的特殊字符开头,这表示这些字符的长度
lengthFieldLength???=?2 表示长度的字节
lengthAdjustment????=?0 某些协议长度可能包括头信息,这里可以出去头
initialBytesToStrip?=?0?(=?do?not?strip?header) 跳过多少个头字节
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html?这里有详细的说明
1.OneToOneHandler,比如StringEncoder/StringDecoder,如果经常要发送字符串,那这个比较有用
2)ReplayingDecoder:?它是FrameDecoder的一个变种子类,它相对于FrameDecoder是非阻塞解码。也就是说,使用?FrameDecoder时需要考虑到读到的数据有可能是不完整的,而使用ReplayingDecoder就可以假定读到了全部的数据。
3)ObjectEncoder?和ObjectDecoder:编码解码序列化的Java对象。
4)HttpRequestEncoder和?HttpRequestDecoder:http协议处理。
(http://www.kafka0102.com/2010/06/167.html?)
经过decode出完整的逻辑数据后,会进行真正的处理,或者在将数据encode成字节数据,就会进行发送。后面再看看真正进行IO?read的时候一些高效的缓冲区操作,以及write的时候流控等。