Netty - 划分ZLib编码数据

时间:2012-06-05 19:49:40

标签: java netty zlib

是否有必要在Netty的ZlibDecoders中使用LengthFieldBasedFrameDecoder等分隔符?我有一个问题,解码器有时会出现“未知压缩方法”错误,当我修改管道以分隔数据时,这就消失了。 Zlib编码器/解码器的javadoc并没有按照要求提及它,尽管它们的超类都有。

2 个答案:

答案 0 :(得分:2)

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

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

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

      +---------------------+       +------+-------------+
      |                     |       |      |             |
      |      Frame          | <=>   |Length| Zipped Frame|
      |                     |       |      |             |
      +---------------------+       +------+-------------+
    

答案 1 :(得分:1)

不,你不应该需要它。事实上,ZlibDecoder / ZlibEncoder通常放在这些处理程序的“前面”。