首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

netty 源码分析之(5)pipeline&ChannelHandler

2013-03-10 
netty 源码分析之(五)pipeline&ChannelHandler}2.DelimiterBasedFrameDecoder,指定分隔符的decoder基于分

netty 源码分析之(五)pipeline&ChannelHandler
}

2.DelimiterBasedFrameDecoder,指定分隔符的decoder

基于分隔符(可以多个,以最前面的为准)的解码器,可以指定最大长度

假设指定\n?为分隔符,最大长度100,

? ? ? ? a.在超过100长度以后还没有找到\n的,当前的数据以及之后的数据区全部丢弃,直到找到\n

? ? ? ? b.没有超过最大长度,继续保留数据

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?这里有详细的说明

其他一些decoder

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的时候流控等。

热点排行