如何在Netty中进行部分解码?

如何在Netty中进行部分解码?,netty,Netty,我正在编写一个Netty客户端,与am嵌入式设备进行对话。我看过教程,但不确定我的设计是否能在Netty中正常工作。 ByteToMessage解码器是否可以仅解码消息的一部分,并允许上游处理程序解码其余部分?如果是这样,您如何向上游通信以传递消息和缓冲区?还是有不同的机制 我正在实施的协议包含以下字段: 16位序列号 8位消息类型 8位保留供将来使用字段 可选-可能为空且可能为AES加密(取决于#2)长度不同的消息数据字段 我想将此处理分解为不同的处理程序,以降低每个处理程序的复杂性 我最初的

我正在编写一个Netty客户端,与am嵌入式设备进行对话。我看过教程,但不确定我的设计是否能在Netty中正常工作。 ByteToMessage解码器是否可以仅解码消息的一部分,并允许上游处理程序解码其余部分?如果是这样,您如何向上游通信以传递消息和缓冲区?还是有不同的机制

我正在实施的协议包含以下字段:

  • 16位序列号
  • 8位消息类型
  • 8位保留供将来使用字段
  • 可选-可能为空且可能为AES加密(取决于#2)长度不同的消息数据字段
  • 我想将此处理分解为不同的处理程序,以降低每个处理程序的复杂性

    我最初的设计是使用大小为4的FixedLengthFrameDecoder,然后使用ByteToMessageDecoder将序列号和消息类型转换为对象,并跳过保留字段的1个字节

    这就是我被卡住的地方。 我希望将该消息传递到下一个处理程序,并根据消息类型,希望它继续从bytebuffer读取以处理可选消息部分。这是您可以做的事情,还是每个字节都需要流经整个链


    我可能会切换到一个ReplayDecoder,并尝试在一个解码器中完成所有操作,但这将是一个相当大的解码器,我希望避免这种情况。

    您可以通过管道向上发送bytebuf,就像对普通对象发送bytebuf一样,并使用
    retainedSlice
    单独查看原始缓冲区,或者使用
    readBytes
    的完整副本,您可以像使用普通对象一样,通过使用
    retainedSlice
    创建原始缓冲区的单独视图,或者使用
    readBytes
    的完整副本,向管道上发送bytebuf