GZIPOutputStream
只是DeflaterOutputStream
的子类,但两者都可以实例化。我何时使用一个而不是另一个?压缩是否相同?
答案 0 :(得分:17)
DeflaterOutputStream,ZIPOutputStream和GZIPOutputStream之间的差异反映了其历史压缩前辈之间的差异:
分别。 Deflate可以被认为是压缩算法的参考实现,而ZIP和GZIP是它的“扩展”。后者都支持“归档”的概念,这在ZipOutputStream的Java API中更为明显。
如果您只是尝试压缩数据流,我建议您使用DeflaterOutputStream,但如果您要创建存档,则应该查看ZipOutputStream。
答案 1 :(得分:5)
DeflaterOutputStream实现原始deflate压缩方法。 GZIPOutputStream增加了GZIP所需的额外逻辑:CRC-32检查,GZIP幻数,GZIP标题,预告片等。请参阅GZIPOutputStream.java和DeflaterOutputStream.java的来源。
答案 2 :(得分:1)
不同之处在于使用的特定压缩格式。来自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实现。