2011-07-10 1 views
14

GZIPOutputStreamは、DeflaterOutputStreamのサブクラスですが、どちらもインスタンス化できます。いつ他のものを使うのですか?圧縮は同じですか?それぞれGZIPOutputStreamとDeflaterOutputStreamの違いは何ですか?

+0

gzipはgzアーカイブを開くことができるよりもzcat、zgrep、toolsなどのフープをジャンプすることなく、多くのツールと互換性があるため、答えに加えて興味深いものです。 – Hay

答えて

14

DeflaterOutputStreamZIPOutputStream、そしてGZIPOutputStreamとの違いは、彼らの歴史的な圧縮前任者との違いを反映しています。 Deflateは圧縮アルゴリズムのリファレンス実装と見なすことができますが、ZIPとGZIPはそれに対する「拡張」です。後者は「アーカイブ」という概念をサポートしています。これは、ZipOutputStreamのJava APIではっきりと分かります。

データストリームを単純に圧縮しようとしている場合は、DeflaterOutputStreamの使用をお勧めしますが、アーカイブを作成する場合は、おそらくZipOutputStreamを参照するべきでしょう。

4

DeflaterOutputStreamは、圧縮されていない圧縮メソッドを実装しています。 GZIPOutputStreamは、CRC32チェック、GZIPマジックナンバー、GZIPヘッダー、トレーラーなど、GZIPに必要なロジックを追加します。GZIPOutputStream.javaDeflaterOutputStream.javaのソースを参照してください。 Compressing and Decompressing Data Using Java APIsも参照してください。

+0

元の応答リンクでは機能しません:[Java APIを使用したデータの圧縮と解凍](http://www.oracle.com/technetwork/articles/java/compress-1565076.html) – kant

1

違いは、使用される特定の圧縮形式です。

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 says:DeflaterOutputStreamためjavadocから

public class GZIPOutputStream 
extends DeflaterOutputStream 

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

GZIPストリームは、GZIPファイル形式に固有の追加詳細をデフレートの実装を拡張します。

関連する問題