1

是否有必要使用分隔符,例如LengthFieldBasedFrameDecoderNetty 的 ZlibDecoders?我遇到了一个问题,即解码器有时会因“未知压缩方法”而出错,当我修改管道以分隔数据时,这种情况就消失了。Zlib 编码器/解码器的 javadocs 没有按要求提及这一点,尽管它们的超类确实如此。

4

2 回答 2

2

它取决于传输协议以及如何将压缩应用于消息/帧,

  • 如果仅对内容部分应用压缩,如下所示(如 http),则不需要 LengthFieldBasedFrameDecoder,因为您的解码器/编码器必须在内部使用带有 ZlibDecoder/ZlibEncoder 的 DecoderEmbedder/EncoderEmbedder。

      +-----+---------------+
      |     |               |
      | HDR |  Content      |
      |     |               |
      +-----+---------------+
    
  • 如果压缩应用于整个帧并且传输协议是 TCP,则压缩帧应具有标头参数来标识消息长度以完全读取它。因此,您将需要管道中的 LengthFieldBasedFrameDecoder 和 LengthFieldPrepender

      +---------------------+       +------+-------------+
      |                     |       |      |             |
      |      Frame          | <=>   |Length| Zipped Frame|
      |                     |       |      |             |
      +---------------------+       +------+-------------+
    
于 2012-06-06T19:26:43.400 回答
1

不,您不应该需要它。事实上,ZlibDecoder/ZlibEncoder 通常放置在此类处理程序的“前面”。

于 2012-06-06T05:35:21.810 回答