【发布时间】: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