本章包括:
1、Codec
2、Decoder
3、Encoder
编解码
任何时候在实现一个基于网络的应用时,都需要实现某种编解码。编解码定义了原始的字节流如何解析并转换为某种逻辑对象。同样,在通过网络将对象传输回去时,也需要相应的将逻辑对象转换为原始的字节流。
编解码由两部分组成:
解码 - 负责将字节流解码为消息或其他字节序列(inbound);
编码 - 负责将消息编码为字节流或其他字节序列(outbound);
解码器
Netty提供了丰富的抽象类来帮助我们实现解码器,主要有以下类型:
-将字节流解码为消息的解码器;
-将消息解码为消息的解码器;
-将消息解码为字节流的解码器;
解码器处理入站数据,因此它是ChannelInboundHandler的一个抽象实现。
ByteToMessageDecoder
decode()、decodeLast()等方法;
ReplayingDecoder
帮助判断buffer中是否有足够的数据可读。
MessageToMessageDecoder
编码器
主要有以下类型:
-将消息编码为消息的编码器;
-将消息编码为字节流的编码器;
编码器处理出站数据,因此它是
ChannelOutboundHandler的一个抽象实现。
MessageToByteEncoder
encode()方法;
MessageToMessageEncoder
Codec
同时提供编、解码器;
ByteToByteCodec
decode()、decodeLast()、encode()方法;
适用场景:解压缩/压缩;
ByteToMessageCodec
适用场景:需要将字节流解码为自定义的消息,并逆向编码时;
MessageToMessageCodec
适用场景:在运行时需要将消息从一种API转换为另外一种API时;
其他组合方式
CombinedChannelDuplexHandler
对ChannelHandler进行组合;