Netty处理字符格式的报错class java.lang.String cannot be cast to class io.netty.buffer.ByteBuf

 问题背景:由于第一次处理和打印机进行通信的业务,转化格式为ByteBuf的时候报错:class java.lang.String cannot be cast to class io.netty.buffer.ByteBuf

分析:根据报错大概意思是String类型不能转化成ByteBuf,但是我印象中也没做什么操作,所以大概是在初始化Handler的时候出现了点错误,因此去看代码

Netty处理字符格式的报错class java.lang.String cannot be cast to class io.netty.buffer.ByteBuf_第1张图片

发现初始化里编解码是不仅有二进制操作也有字符串操作,而真正的情况大部分都是用二进制来进行传输,而不是字符串,强行将二进制转化为字符串会报错

Netty处理字符格式的报错class java.lang.String cannot be cast to class io.netty.buffer.ByteBuf_第2张图片

解决:

直接去除字符串的编解码,然后在Handler里进行二进制的转化。记住传输最好都转化成二进制,在业务上再进行数据的转化

class PrinterStatusHandler extends ChannelInboundHandlerAdapter {
        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) {

            if (msg instanceof ByteBuf) {
                ByteBuf buf = (ByteBuf) msg;
                byte[] bytes = new byte[buf.readableBytes()];
                buf.readBytes(bytes);
                System.out.println("收到原始字节数据: " + Arrays.toString(bytes));
            }

            //正常状态:22

        }
    }

你可能感兴趣的:(java,开发语言)