Netty常用解码器

Netty常用解码器教程

在使用 NIO 进行网络编程的时候,往往需要将读取到的字节数组或者字节缓冲区解码为业务可以使用的 POJO 对象。在 Netty 中就提供了一个抽象的解码工具类 ByteToMessageDecoder。无论是 Netty 中实现好的解码器还是用户自定义的解码器都需要继承该抽象类。实现里面的解码方法,从而实现从 ByteBuf 到 POJO 对象的解码。

Netty相关解码器

TCP 以流的方式进行数据传输,上层的应用协议为了对消息进行区分,我们了解了 TCP 的粘包和拆包机制,它主要有以下四种解决方案:

  1. 消息长度固定,累计读取到长度总和为定长 LEN 的报文后,就认为读取到了一个完整的消息,将计数器置位,重新读取下一个数据报。
  2. 将回车换行符作为消息结束符。
  3. 将特殊的分隔符作为消息的结束标志,回车换行符是一个钟特殊的结束分隔符。
  4. 通过在消息头中定长度字段来标识消息的总长度。

Netty 针对上面 4 种方式,每种方式都提供了相应的处理方法,消息定长度:FixedLengthFrameDecoder,回车换行符作为结束标识:LineBasedFrameDecoder,特殊分割符:DelimiterBasedFrameDecoder 和 通用解码器:LengthFieldBasedFrameDecoder。

Netty常用解码器总结

解码器就相当于将网络中接收到的数据进行解析,转换成应用系统能够识别的数据。Netty 中已经提供了一些比较完善的解码器类,它们很好的帮用户解决了拆包粘包问题。