一、什么是Decoder和Encoder
在Netty里面,有四个核心概念,它们分别是:
- Channel:一个客户端与服务器通信的通道。
- ChannelHandler:业务逻辑处理器, 通常情况下,业务逻辑都是存在于ChannelHandler之中。
- ChannelInboundHandler:输入处理器
- ChannelOutboundHandler:输出处理器
- ChannelPipeline:用于存放ChannelHandler的双向链表。
- ChannelContext:通信管道的上下文
它们之间的交互流程是:
- 事件传递给 ChannelPipeline 的第一个 ChannelHandler
- ChannelHandler 通过关联的 ChannelHandlerContext 传递事件给 ChannelPipeline 中的 下一个
而我们要讲的Decoder和Encoder,就是ChannelInboundHandler和ChannelOutboundHandler,分别用于在数据流进来的时候将字节码转换为消息对象和数据流出去的时候将消息对象转换为字节码。
二、Encoder
Netty为我们提供了一组类来写encoder:
- 编码从消息到字节:MessageToByteEncoder
- 编码从消息到消息:MessageToMessageEncoder
三、Decoder
四、自定义Decoder和Encoder