【问题标题】:How does zlib inflate GZIP trailer correctly in JAVA?zlib 如何在 JAVA 中正确膨胀 GZIP 预告片?
【发布时间】:2021-12-29 02:52:14
【问题描述】:

在 JAVA 中使用 GZIPInputStream 时,它不会将整个缓冲区传递给 zlib 并将其膨胀为 GZIP 格式。取而代之的是,GZIP header 似乎在 JAVA 端进行了处理,然后将剩余部分(原始 deflate 数据 + GZIP 预告片)传递给 zlib 并以 DEFLATE 格式进行膨胀工作。
我的问题是 zlib 如何正确进行 inflate 工作,因为传入的数据不仅仅是原始的 deflate 数据?也就是说,zlib 是如何保留 8 字节的尾部而不把它当作数据需要解压的呢?

【问题讨论】:

  • this 回答你的问题了吗?
  • 抱歉,没有。在我的情况下,数据不作为 GZIP 格式处理。
  • 您能否发布此问题的代码示例。
  • 我问的是一个普遍的问题,我相信每个使用 GZIPInputStream 类的 JAVA 代码都面临这个问题。让我清楚地解释我的问题,GZIP = GZIP 标头 + 原始放气数据 + GZIP 预告片。如果使用 zlib 以 GZIP 格式对所有内容进行膨胀,一切都很好。但是在GZIPInputStream 类中,它不使用GZIP 格式,而是使用DEFLATE 格式,而不是传递上面的整个GZIP 内容,而是将数据传递给没有GZIP 标头的zlib,即原始放气数据+ GZIP 预告片。在我看来,zlib 需要对原始 deflate 数据部分进行膨胀,并保持 GZIP 预告片不变。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java compression zlib inflate gzipinputstream


【解决方案1】:

deflate 格式是自动终止的。 zlib 停止解压缩原始 deflate 流,直到处理完标记为最后一个块的 deflate 块。剩下的就是 Java 代码要处理的预告片了。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多