我目前正在使用java.util.zip.Deflater
进行压缩。同时,可以使用java.util.zip.GZIPOutputStream
进行压缩。这里我主要关注基本的字节数组压缩。
有人能告诉我这些Deflater和GZIPOutputStream之间的区别吗?(从性能方面考虑...)。
我目前正在使用java.util.zip.Deflater
进行压缩。同时,可以使用java.util.zip.GZIPOutputStream
进行压缩。这里我主要关注基本的字节数组压缩。
有人能告诉我这些Deflater和GZIPOutputStream之间的区别吗?(从性能方面考虑...)。
Deflater
会生成 zlib-wrapped deflate 压缩数据,除非 nowrap
为 true,此时它会生成原始(未封装的)deflate 压缩数据。
GZIPOutputStream
会生成 gzip-wrapped deflate 数据。
deflate是在RFC 1951中定义的一种压缩数据格式。
zlib 是一个两字节的标头和四字节的尾部,提供紧凑的流识别和未压缩数据的完整性检查。zlib 在RFC 1950中描述。
gzip 是一个10+字节的标头和8字节的尾部,提供元数据和完整性检查,其中元数据可以包括文件名、修改日期、起源操作系统、注释和额外数据。gzip 在RFC 1952中描述。
在性能方面没有区别,除了头部和尾部的几个字节不同之外。
GZIPOutputStream
只有一个速度/压缩比的设置,不能更改。而 Deflater
有十个可能的比率,从最快+最少压缩到最慢+最多压缩。这里有一篇很好的文章,其中包含图表关于此问题。