18

GZIPOutputStream只是一个子类,DeflaterOutputStream但两者都可以实例化。我什么时候使用一个而不是另一个?压缩是一样的吗?

4

3 回答 3

19

DeflaterOutputStreamZIPOutputStreamGZIPOutputStream之间的差异反映了它们历史压缩前辈之间的差异:

分别。Deflate 可以被认为是压缩算法的参考实现,而 ZIP 和 GZIP 是它的“扩展”。后者都支持“存档”的概念,这在 ZipOutputStream 的 Java API 中更为明显。

如果您只是尝试压缩数据流,我建议您使用 DeflaterOutputStream,但如果您正在创建存档,您可能应该查看 ZipOutputStream。

于 2011-07-10T02:38:45.077 回答
5

DeflateOutputStream 实现了原始的 deflate 压缩方法。GZIPOutputStream 添加了 GZIP 所需的额外逻辑:CRC-32 检查、GZIP 幻数、GZIP 标头、预告片等。请参阅GZIPOutputStream.javaDeflaterOutputStream.java的源代码。

于 2011-07-10T02:39:22.730 回答
2

不同之处在于使用的特定压缩格式。来自 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.

GZIPOutputStream 说

public class GZIPOutputStream
extends DeflaterOutputStream

This class implements a stream filter for writing compressed data in the GZIP file format. 

GZIP 流使用特定于 GZIP 文件格式的其他详细信息扩展了 Deflate 实现。

于 2011-07-10T02:39:54.387 回答