Netty 框架学习 —— 编解码器框架 (4)

首先,让我们研究下述代码,该实现扩展了 ByteToMessageDecoder,因为它要从 ByteBuf 读取字符

public class ByteToCharDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { while (in.readableBytes() >= 2) { out.add(in.readChar()); } } }

这里的 decode() 方法一次将从 ByteBuf 中提取 2 字节,并将它们作为 char 写入到 List 中,其将会被自动装箱为 Character 对象

下述代码将 Character 转换回字节。这个类扩展了 MessageToByteEncoder,因为它需要将 char 消息编码到 ByteBuf 中。这是通过直接写入 ByteBuf 做到的

public class CharToByteEncoder extends MessageToByteEncoder<Character> { @Override protected void encode(ChannelHandlerContext ctx, Character msg, ByteBuf out) throws Exception { out.writeChar(msg); } }

既然我们有了解码器和编码器,我们可以结合它们来构建一个编解码器

// 通过该解码器和编码器实现参数化CombinedByteCharCodec public class CombinedChannelDuplexHandler extends io.netty.channel.CombinedChannelDuplexHandler<ByteToCharDecoder, CharToByteEncoder> { public CombinedChannelDuplexHandler() { // 将委托实例传递给父类 super(new ByteToCharDecoder(), new CharToByteEncoder()); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjypx.html