解码器 */ public class LoraDecoder extends CumulativeProtocolDecoder { private final Charset charset; public LoraDecoder(Charset charset) { this.charset = charset; } @Override protected boolean doDecode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception { System.out.println("lora decode start..."); IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true); CharsetDecoder cd = charset.newDecoder(); String version = "", commandWord = ""; int i = 1; //读取哪一行 int matchCount = 0; while (ioBuffer.hasRemaining()){ byte b = ioBuffer.get(); buffer.put(b); //读十五次 if( i < 2) { matchCount++; if (i == 1) { buffer.flip(); version = buffer.getString(matchCount, cd); version = version.substring(0, version.length() - 1); buffer.clear(); matchCount = 0; } if (i == 2){ buffer.flip(); commandWord = buffer.getString(matchCount, cd); commandWord = commandWord.substring(0, commandWord.length() - 1); buffer.clear(); matchCount = 0; } //offset偏移量增加 i++; } } LoraMessage message = new LoraMessage(); message.setVersion(version); message.setCommandWord(commandWord); protocolDecoderOutput.write(message); return false; } }
是因为解码器中没有执行以下write方法:
LoraMessage message = new LoraMessage();
message.setVersion(version);
message.setCommandWord(commandWord);
protocolDecoderOutput.write(message);