如何将数据从第一解码器传输到第二解码器?

68bkxrlz  于 2022-10-22  发布在  Java
关注(0)|答案(1)|浏览(182)

我必须解码:
1.Ping解码器
1.握手解码器
在PingDecoder中,我读取1个字节,如果它是PING字节,我只记录它,如果不是,我想将所有数据(用这个字节)传输到HandshakeDecoder:

public class PingDecoder extends ReplayingDecoder<Void> {
  ...
  @Override
  protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
    byte prefix = in.readByte();
    if (prefix == PING) {
        log.debug("Ping");

    } else {
        out.add(prefix);
        out.add(in.readBytes(super.actualReadableBytes()));
    }
  }
}

我的问题是HandshakeDecoder获取的数据没有前缀。

6yoyoihd

6yoyoihd1#

我自己找到了解决方案。我应该将前缀发送为ByteBuf,而不仅仅是byte:

protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
    byte prefix = in.readByte();
    if (prefix == PING) {
        log.debug("Ping");
    } else {
        byte[] buffer = new byte[1];
        buffer[0] = prefix;
        ByteBuf bb = Unpooled.wrappedBuffer(buffer);
        out.add(bb);
        if (in.isReadable()) {
            out.add(in.readBytes(super.actualReadableBytes()));
        }
    }
}

相关问题