【发布时间】:2011-07-10 02:28:11
【问题描述】:
GZIPOutputStream 只是DeflaterOutputStream 的子类,但两者都可以实例化。我什么时候使用一个而不是另一个?压缩是一样的吗?
【问题讨论】:
-
除了答案之外,GZIP 很有趣,因为输出将与许多工具兼容,而无需跳圈,例如 zcat、zgrep 和可以打开 gz 档案的工具。
标签: java gzipoutputstream
GZIPOutputStream 只是DeflaterOutputStream 的子类,但两者都可以实例化。我什么时候使用一个而不是另一个?压缩是一样的吗?
【问题讨论】:
标签: java gzipoutputstream
DeflaterOutputStream、ZIPOutputStream 和 GZIPOutputStream 之间的差异反映了它们历史压缩前辈之间的差异:
分别。 Deflate 可以被认为是压缩算法的参考实现,而 ZIP 和 GZIP 是它的“扩展”。后者都支持“存档”的概念,这在 ZipOutputStream 的 Java API 中更为明显。
如果您只是尝试压缩数据流,我建议您使用 DeflaterOutputStream,但如果您正在创建存档,您可能应该查看 ZipOutputStream。
【讨论】:
不同之处在于使用的特定压缩格式。来自 DeflaterOutputStream 的javadoc:
public class DeflaterOutputStream
extends FilterOutputStream
This class implements an output stream filter for compressing data in the "deflate" compression format. It is also used as the basis for other types of compression filters, such as GZIPOutputStream.
public class GZIPOutputStream
extends DeflaterOutputStream
This class implements a stream filter for writing compressed data in the GZIP file format.
GZIP 流使用特定于 GZIP 文件格式的其他详细信息扩展了 Deflate 实现。
【讨论】:
DeflaterOutputStream 实现了原始的 deflate 压缩方法。 GZIPOutputStream 添加了 GZIP 所需的额外逻辑:CRC-32 检查、GZIP 幻数、GZIP 标头、尾标等。请参阅 GZIPOutputStream.java 和 DeflaterOutputStream.java 的源代码。
【讨论】: