介绍在之前的系列文章中,我们提到netty中的channel只接受ByteBuf类型的对象。如果不是ByteBuf对象,则需要进行编码和解码。转换器对其进行转换。今天就来说说netty的自定义编解码器实现中需要注意的问题。自定义编码器和解码器的实现在介绍netty自带的编码器和解码器之前,我先说一下如何实现自定义编码器和解码器。netty中所有的编码器和解码器都派生自ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter。对于ChannelOutboundHandlerAdapter,最重要的两个类是MessageToByteEncoder和MessageToMessageEncoder。MessageToByteEncoder将消息编码到ByteBuf中。这个类也是我们自定义编码最常用的类。继承这个类,实现encode方法即可。请注意,此类具有通用类型,它指定消息的对象类型。例如,如果我们想将Integer转换为ByteBuf,我们可以这样写:);}}MessagerToMessage是消息和消息之间的转换,因为消息不能直接写入通道,所以需要和MessageToByteEncoder配合使用。下面是一个整数到字符串的例子:对于ChannelInboundHandlerAdapter,最重要的两个类是ByteToMessageDecoder和MessageToMessageDecoder。ByteToMessageDecoder将ByteBuf转换为对应的消息类型。我们需要继承这个类并实现decode方法。下面是一个方法,它从ByteBuf中读取所有可读字节,并将结果放入一个新的ByteBuf中。公共类SquareDecoder扩展ByteToMessageDecoder{@Overridepublicvoiddecode(ChannelHandlerContextctx,ByteBufin,List