Netty 编解码器详解:从基础到 Protobuf 实战
在网络通信中,数据以二进制形式传输,而应用程序则需处理结构化数据(如字符串、对象)。编解码器是连接二进制数据与应用层对象的桥梁,Netty 提供了丰富的编解码器组件,简化了数据转换过程。本文将系统讲解 Netty 编解码器的设计原理、常用实现及自定义方法,并通过 Protobuf 实战展示跨语言序列化方案。
编解码器的核心概念
基本定义
- 编码器(Encoder):将应用层对象转换为二进制字节流(出站操作),继承
ChannelOutboundHandler。 - 解码器(Decoder):将二进制字节流转换为应用层对象(入站操作),继承
ChannelInboundHandler。
核心目标:屏蔽底层二进制数据的处理细节,让开发者专注于业务逻辑。
Netty 编解码器的设计模式
Netty 编解码器遵循责任链模式,通过 ChannelPipeline 串联多个编解码器和业务处理器:
- 数据入站时,依次经过解码器 → 业务处理器。
- 数据出站时,依次经过业务处理器 → 编码器。
例如,一个简单的字符串通信流程:
1 | 客户端发送 String → StringEncoder 编码为 ByteBuf → 网络传输 → 服务端 StringDecoder 解码为 String → 业务处理 |
Netty 内置编解码器
Netty 提供了多种开箱即用的编解码器,覆盖常见数据类型:
字符串编解码器
StringEncoder:将String编码为ByteBuf(默认 UTF-8 编码)。StringDecoder:将ByteBuf解码为String。
