当前位置: 首页 > 知识库问答 >
问题:

ReplayingDecoder在解码时引发异常

左丘成天
2023-03-14

我已经创建了一个解码器来处理客户端发送的字节。给你

import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;

public class MessageDecoder extends ReplayingDecoder<DecoderState> {

    private int length;

    public MessageDecoder()
    {
        super(DecoderState.READ_LENGTH);
    }

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> out) throws Exception{
        System.out.println(buf.readableBytes());
        switch(state()){
            case READ_LENGTH:
                length=buf.readInt();
                System.out.println("length is: "+length);
                checkpoint(DecoderState.READ_CONTENT);
            case READ_CONTENT:
                ByteBuf frame = buf.readBytes(length);
                checkpoint(DecoderState.READ_LENGTH);
                out.add(frame);
                break;
            default:
                throw new Error("Shouldn't reach here");
        }
    }
}

并在客户端发送字节时抛出下一个错误

Io.netty.handler.codec.DecoderException:java.lang.IllegalArgumentException:MinimumReadableBytes:-603652096(预期:>=0)在io.netty.handler.codec.ReplayingDecoder.CallDecode(replayingDecoder.java:431)在io.netty.handler.codecer.ChannelRead(BytetomessageDecoder.ChannelRead(BytetomessageDecoder.java:245)在loop.java:371)在io.netty.util.concurrent.SingleThreadeVentExecutor$2处运行(SingleThreadeVentExecutor.java:112)在io.netty.util.concurrent.DefaultThreadFactory$DefaultUnnableDecorator.Run(DefaultThreadFactor.java:137)在java.lang.Thread.Run(未知源)

这段代码来自官方文档http://netty.io/4.0/api/io/netty/handler/codec/replayingdecoder.html,所以我真的不明白为什么它不能工作

共有1个答案

欧阳俊晖
2023-03-14

远程对等方可能确实将int编写为未签名。也许您想要的是使用readUnsignedInt()?

 类似资料:
  • 下面是我的加密方法(值是一个输入参数): 下面是我的解密方法(值是一个输入参数): 我有个例外: 我读过不同的主题,所以我发现,当没有填充和有另一种密码模式时,就会发生这种异常。那么,怎么了?

  • 问题内容: 当我使用下面的代码时,在什么情况下会得到异常。 任何人都可以帮忙吗???????? 问题答案: HTTP状态代码是服务器的响应,因此,如果您控制服务器,则可以使其返回所需的任何错误。如果您无法控制服务器,则可以尝试发送错误/无效的请求,以便服务器进行投诉。 在服务器端这样的事情:

  • 问题内容: 当整数溢出发生而不是静默失败时,是否可能引发某种运行时异常。例如 由于溢出而打印,我想得到某种运行时异常 问题答案: 是的,从Java-8开始,您可以使用新的Exact方法,它将在溢出时引发异常(java.lang.ArithmeticException:整数溢出)。例如

  • 在用户任务上应用边界计时器事件,在服务任务上添加java类属性,但当计时器到期触发异常列表时,会抛出,即无法找到分配给服务任务的类。类存在于类路径上。activiti配置中还启用了asyncExecutorActivate属性 这里有一个代码 例外 Bean初始化