引:Netty在帮我们解决性能的同时,也提供了丰富的编解码器来为我们业务上提供便利,这次我们就来看看Netty的解码器。
解码器基类
解码:就是将二进制数据流解码为自定义数据包。
在Netty中解码器的基类是ByteToMessageDecoder,然后我们要明白的是ByteToMessageDecoder其实是一个ChannelInboundHandlerAdapter。
一个解码器解码的过程主要有如下三个步骤:
- 累加字节流
- 调用子类的decode方法进行解析
- 将解析到的ByteBuf向下传播
当我们知道ByteToMessageDecoder是一个Handler的时候,我们就会去找它对事件的处理方法,主要是读事件,所以我们找到读事件处理方法:
1 | // step 1 |
LineBasedFrameDecoder
我们挑选了基于分隔符解码器LineBasedFrameDecoder来分析,它可以同时处理 \n以及\r\n两种类型的行分隔符,我们看看它的decode方法:
1 | // step 1 (解码器模板) |
总结
其他的解码器也可以根据LineBasedFrameDecoder的思路去分析。当然我们最需要关注的还是整个解码器的设计思想。学会去抽象一类东西。