package com.casic.handler; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToMessageDecoder; import lombok.extern.slf4j.Slf4j; import java.nio.charset.Charset; import java.util.List; /** * @description: 将从接口取到的数据编码 * @author: Stone * @create: 2019-01-11 15:15 **/ @Slf4j public class ReceiverDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception { if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { // log.info(" String : " + msg.toString(Charset.defaultCharset())); // if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { pareDeviceHex(msg); // out.add(msg); // } } } private static void pareDeviceHex(ByteBuf byteBuf) { //去掉补位 log.info(" String : " + byteBuf.toString(Charset.defaultCharset())); String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset()); log.info(" devcode : " + devcode); byteBuf.resetReaderIndex();//重置位判断 String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset()); log.info(" valueStr : " + valueStr); long defaultValue = Long.valueOf(valueStr); log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); // System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); } }