Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java netty编码器中的堆栈溢出_Java_Netty - Fatal编程技术网

Java netty编码器中的堆栈溢出

Java netty编码器中的堆栈溢出,java,netty,Java,Netty,在第一次初始化通道时,我想在发送实际消息之前发送自己的自定义消息。我有: public class MyClientInitializerFactory extends ClientInitializerFactory { @Override protected void initChannel(Channel ch) { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new EncoderTwo());

在第一次初始化通道时,我想在发送实际消息之前发送自己的自定义消息。我有:

public class MyClientInitializerFactory extends ClientInitializerFactory {

@Override
protected void initChannel(Channel ch) {
    ChannelPipeline pipeline = ch.pipeline();
    pipeline.addLast(new EncoderTwo());
    pipeline.addLast(new EncoderOne());
}
}
电子编码器:

public class EncoderOne extends MessageToMessageEncoder<Object> {

@Override
protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
    byte[] bytes = "ABCD".getBytes(StandardCharsets.UTF_8);
    ByteBuf byteBuf = Unpooled.buffer(bytes.length);
    Channel channel = ctx.channel();
    channel.writeAndFlush(byteBuf);
    out.add(msg); // retaining original message for further processing
    ctx.pipeline().remove(this);
}

我做错了什么?

问题是调用
channel.writeAndFlush(byteBuf),这意味着它将再次从尾部开始流经管道,从而再次在编码器中结束。因此,要么在调用编码器之前先删除它,要么调用
ctx.writeAndFlush(…)


另一种方法是将
byteBuf
添加到out
列表中,然后直接调用
flush()?你为什么这么做?
msg
的类型是什么?它是一个字符串。我将它添加到列表中,因为我需要在那里处理它,并在处理后发送。谢谢!将byteBuf添加到out列表中不会将其与原始消息一起传递给下一个编码器吗?
 ByteBuf byteBuf = Unpooled.buffer(bytes.length);
 Channel channel = ctx.channel();
 channel.writeAndFlush(byteBuf);