GZIPOutputStream
是DeflaterOutputStream
的一个子类,但两者都可以实例化。我应该在什么情况下使用一个而不是另一个?压缩效果是否相同?
GZIPOutputStream
是DeflaterOutputStream
的一个子类,但两者都可以实例化。我应该在什么情况下使用一个而不是另一个?压缩效果是否相同?
DeflaterOutputStream、ZIPOutputStream和GZIPOutputStream之间的差异反映了它们历史压缩前辈之间的差异:
Deflate可以被认为是压缩算法的参考实现,而ZIP和GZIP是对其的“扩展”。后两者都支持“存档”概念,在Java API中ZipOutputStream中更为明显。
如果您只是尝试压缩数据流,我建议使用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流扩展了Deflate实现,具有针对GZIP文件格式的附加详细信息。