0

私はJavaを使用しています。

Deflaterクラスを使用して入力をデフレートしたいのですが、GZIPで解凍できるように、GZIP形式で出力したいと思います。これどうやってするの?私の理解では、それは別の形式で出力されます。私は初心者なので、もしあなたが明示的で、多分非常に役立つコード例を与えることができれば。

出力する前にいくつかのDeflaterクラス固有の機能を使用する必要があるため、GZIPOutputStreamを使用できません。

4

2 に答える 2

2

どうやらとにかくボンネットの下でGZIPOutputStream使用Deflaterしているので、あなたはそんなにクレイジーなことを何もしようとはしていません。

1つの可能性(このページから、おそらく読む価値があります)は、そのオブジェクトGZIPOutputStreamにアクセスできるようにサブクラス化することです。Deflater多かれ少なかれこのようなもの(テストされていない):

public class MyGZIPOutputStream extends GZIPOutputStream {

  public MyGZIPOutputStream(final OutputStream out) throws IOException {
    super(out);
  }

  public void setDictionary(byte[] b) {
    def.setDictionary(b);
  }

}

MyGZIPOutputStream次に、を使用してファイルを保存する前に、setDictionary呼び出しを行うことができます。

変数defはの保護されたメンバーでGZIPOutputStreamあるため、変数にアクセスするにはサブクラス化が必要です。

于 2011-10-27T01:49:59.833 に答える
0

最初の質問はなぜですか?

Deflaterの出力をGZIPで圧縮するということは、受信者がGUnzipと膨張の両方を行う必要があることを意味します。

Deflaterの出力をGZIPすると、サイズが大きくなる可能性があります。それは確かにそれを大幅に圧縮しません。

GZIP出力が必要な場合は、デフレーターを忘れてください。

辞書が必要な場合は、GZIP出力を忘れてください。

于 2011-10-27T01:29:33.800 に答える