在使用 NIO 进行网络编程的时候,往往需要将读取到的字节数组或者字节缓冲区解码为业务可以使用的 POJO 对象。在 Netty 中就提供了一个抽象的解码工具类 ByteToMessageDecoder。无论是 Netty 中实现好的解码器还是用户自定义的解码器都需要继承该抽象类。实现里面的解码方法,从而实现从 ByteBuf 到 POJO 对象的解码。
TCP 以流的方式进行数据传输,上层的应用协议为了对消息进行区分,我们了解了 TCP 的粘包和拆包机制,它主要有以下四种解决方案:
Netty 针对上面 4 种方式,每种方式都提供了相应的处理方法,消息定长度:FixedLengthFrameDecoder,回车换行符作为结束标识:LineBasedFrameDecoder,特殊分割符:DelimiterBasedFrameDecoder 和 通用解码器:LengthFieldBasedFrameDecoder。
解码器就相当于将网络中接收到的数据进行解析,转换成应用系统能够识别的数据。Netty 中已经提供了一些比较完善的解码器类,它们很好的帮用户解决了拆包粘包问题。