18

GZIPOutputStreamの単なるサブクラスですDeflaterOutputStreamが、両方ともインスタンス化できます。いつどちらを使用するのですか? 圧縮は同じですか?

4

3 に答える 3

19

DeflaterOutputStreamZIPOutputStream、およびGZIPOutputStreamの違いは、それらの歴史的な圧縮の前身の違いを反映しています。

それぞれ。Deflateは、圧縮アルゴリズムのリファレンス実装と見なすことができますが、ZIPとGZIPはそれに対する「拡張」です。後者はどちらも「アーカイブ」の概念をサポートしています。これは、ZipOutputStreamのJavaAPIでより明確になります。

単にデータストリームを圧縮しようとしている場合は、DeflaterOutputStreamを使用することをお勧めしますが、アーカイブを作成している場合は、代わりにZipOutputStreamを確認する必要があります。

于 2011-07-10T02:38:45.077 に答える
5

DeflaterOutputStreamは、生のdeflate圧縮メソッドを実装します。GZIPOutputStreamは、GZIPに必要な追加ロジックを追加します:CRC-32チェック、GZIPマジックナンバー、GZIPヘッダー、トレーラーなど。GZIPOutputStream.javaおよびDeflaterOutputStream.javaのソースを参照してください。

于 2011-07-10T02:39:22.730 に答える
2

違いは、使用される特定の圧縮形式にあります。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.

GZIPOutputStreamは言う

public class GZIPOutputStream
extends DeflaterOutputStream

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

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

于 2011-07-10T02:39:54.387 に答える