Skip to content

编解码器

在网络传输中,数据是通过字节流传输。

对应到客户端和服务端需要进行对应的编码和解码。

解码器

  • 将字节解码为消息:ByteToMessageDecoder
  • 将一种消息类型解码为另一种:MessageToMessageDecoder。

解码器是负责将入站数据从一种格式转换到另一种格式的,所以 Netty 的解码器实现了 ChannelInboundHandler。

异常处理

  • TooLongFrameException

    由于 Netty 是一个异步框架,所以需要在字节可以解码之前在内存中缓冲它们。因此,不能让解码器缓冲大量的数据以至于耗尽可用的内存。为了解除这个常见的顾虑,Netty 提供了 TooLongFrameException 类,其将由解码器在帧超出指定的大小限制时抛出。

编码器

  • 将消息编码为字节;MessageToByteEncoder
  • 将消息编码为消息:MessageToMessageEncoder,T 代表源数据的类型

编码解码器

同时实现 ChannelInboundHandler 和 ChannelOutboundHandler 接口。在一个类里面写编码和解码的逻辑。

  • 抽象类 ByteToMessageCodec
  • 抽象类 MessageToMessageCodec
java
public class ChannelDuplexHandler extends ChannelInboundHandlerAdapter implements ChannelOutboundHandler {
    public ChannelDuplexHandler() {
    }
}