Netty的Decoder Handler 处理流程

数据从客户端传递为ByteBuf类型,可以先经过实现自定义 ByteToMessageDecoder 实现类对ByteBuf数据进行初步转换(比如字符串),如下代码实现将ByteBuf数据转为String数据,

public class MyDecoder extends ByteToMessageDecoder {  //自定义解码器

    @Override
    public void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out)
            throws Exception {
        if (in.readableBytes() >= 4) {  //判断读取数据是否可读
            // 待处理的消息包
            byte[] bytesReady = new byte[in.readableBytes()];
            in.readBytes(bytesReady);
            // 将字节数据转为字符串并去除首尾换行和空格
            // 此处的转换后的字符串类型是下一个Handler接收的消息类型
            out.add(new String(bytesReady).trim());
        }
    }
}

decoder执行完成之后channelPipeline会自动调用 fireChannelRead(Object msg) 方法,此方法调用后续处理String类型消息的Handler,此时可以对字符串消息进行一定的处理,比如验证字符串时候符合一定的格式,或者能否转换为指定的对象类型&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值