什么是 Netty DecoderResult 以及如何使用它?

What Is Netty DecoderResult and How to Use It?

我正在学习如何使用 Netty(这个工具是全新的)。我研究了 Netty 文档中给出的 HTTP 服务器示例。但是我不明白 DecoderResult 是什么以及它在示例中的使用方式。

到目前为止我学到了什么:
1.解码器是将字节转换为更复杂的对象。在这种情况下字节为 HttpRequest.
2.在最后ChannelInboundHandler(所有解码完成后)我收到我的对象(例如HttpRequest)。
3.HttpSnoopServerHandlerchannelRead0方法的实现很清楚:获取对象,向下转换,提取信息,构建响应,准备好后写入。

我不明白的是为什么检查解码结果(即appendDecoderResult)是在从HttpRequest对象中读取一些东西之后完成的?我不应该在触摸 msg 之前检查此类故障吗?更一般地说,当解码失败时会发生什么?

郑重声明,这是我感到困惑的代码部分:

@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof HttpRequest) {
        val request = (HttpRequest) msg;

        // read all sort of stuff from request
        // and add them to the response buffer;

        // This is the line confused me :/
        appendDecoderResult(buf, request);
    }
}

它实际上是 HTTP 解码器,这意味着它读取数据并尝试将其解码为 HTTP 请求。这样做时可能会遇到一些问题,这些问题可能会导致解码过程失败。尽管如此,还是可以使用已经解码的数据。所以我想顺序并不重要。