Netty 什么是 Codec
我们在编写一个网络应用程序的时候需要实现某种 codec (编解码器),有了codec就能够将原始字节数据与目标程序数据的格式相互转化。我们知道数据在网络中的传播都是以字节码的数据形式进行的,codec的组成部分有两个,分别是:decoder(解码器)和encoder(编码器)。
编码器和解码器将一个字节序列转换为另一个业务对象,那么我们要如何区分它们呢?
想到一个“消息”是一个结构化的字节序列,语义为一个特定的应用程序——它的“数据”。encoder 是组件,转换消息格式适合传输(就像字节流),而相应的 decoder 转换传输数据回到程序的消息格式。逻辑上,“从”消息转换来是当作操作 outbound(出站)数据,而转换“到”消息是处理 inbound(入站)数据。
我们看看 Netty 的提供的类实现的 codec 。
解码器负责将消息从字节或其他序列形式转成指定的消息对象,编码器的功能则相反;解码器负责处理“入站”数据,编码器负责处理“出站”数据。编码器和解码器的结构很简单,消息被编码后解码后会自动通过ReferenceCountUtil.release(message)释放,如果不想释放消息可以使用ReferenceCountUtil.retain(message),这将会使引用数量增加而没有消息发布,大多数时候不需要这么做。
更多建议: