2014-07-11 61 views
1

我目前使用java.util.zip.Deflater進行壓縮。也可以使用java.util.zip.GZIPOutputStream進行壓縮。這裏我主要關注字節數組壓縮。
任何人都可以讓我知道這些Deflater和GZIPOutputStream的區別。 (performancewise ..)。Deflater和GZip壓縮之間的區別

回答

5

Deflater產生zlib包裹的deflate壓縮數據,除非nowrap爲真,在這種情況下它會產生原始的(未包裝的)deflate壓縮數據。

GZIPOutputStream產生gzip包裹的deflate數據。

放氣是在RFC 1951中定義的壓縮數據格式。

ZLIB是一個兩字節的報頭和四字節掛車提供所述流和完整性在非壓縮數據檢查緊湊鑑定。在RFC 1950中描述了zlib。

gzip的是10+字節報頭和8字節的拖車,其提供元數據和完整性檢查,其中,所述元數據可以包括文件名,修改日期,始發操作系統,評論,額外數據。在RFC 1952中描述了gzip。

有相對於性能,比在首部和尾部的幾個字節差其他沒有區別。

0

性能有差異,因爲GZIPOutputStream只有一個速度/壓縮比設置不可改變,而Deflater有10個可能的比率,從最快的壓縮到最慢的壓縮到最慢的壓縮。這是一個很好的文章,圖表about it

+0

@MarkAdler - 以gzip的Java IMPL不允許直接更改壓縮級別設置,看到它的構造函數和方法:https://docs.oracle.com/javase/7/docs/api/java/util/zip/ GZIPOutputStream.html。內部它可以訪問「DEF」的字段,它是平減型,其用於流內部的壓縮機。因此,可以覆蓋該流以訪問受保護的「def」並在那裏設置級別,但不能直接通過GZip ..接口。 –