私はJavaを使用しています。
Deflaterクラスを使用して入力をデフレートしたいのですが、GZIPで解凍できるように、GZIP形式で出力したいと思います。これどうやってするの?私の理解では、それは別の形式で出力されます。私は初心者なので、もしあなたが明示的で、多分非常に役立つコード例を与えることができれば。
出力する前にいくつかのDeflaterクラス固有の機能を使用する必要があるため、GZIPOutputStreamを使用できません。
私はJavaを使用しています。
Deflaterクラスを使用して入力をデフレートしたいのですが、GZIPで解凍できるように、GZIP形式で出力したいと思います。これどうやってするの?私の理解では、それは別の形式で出力されます。私は初心者なので、もしあなたが明示的で、多分非常に役立つコード例を与えることができれば。
出力する前にいくつかのDeflaterクラス固有の機能を使用する必要があるため、GZIPOutputStreamを使用できません。
どうやらとにかくボンネットの下で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
あるため、変数にアクセスするにはサブクラス化が必要です。
最初の質問はなぜですか?
Deflaterの出力をGZIPで圧縮するということは、受信者がGUnzipと膨張の両方を行う必要があることを意味します。
Deflaterの出力をGZIPすると、サイズが大きくなる可能性があります。それは確かにそれを大幅に圧縮しません。
GZIP出力が必要な場合は、デフレーターを忘れてください。
辞書が必要な場合は、GZIP出力を忘れてください。