1

したがって、Runnable クラス内で Deflate しようとしている小さい固定サイズのバッファーを読み取る入力ストリームがあります。

randomClass implements Runnable {
    public void run() {
        ...
        byte[] output = new Byte[FIXED];
        Deflater deflater = new Deflater();
        deflater.setInput(uncompressed);
        deflater.setLevel(Deflater.DEFLATED);
        int length = deflater.deflate(output);
        ...
    } 
}

私が直面している問題は、長さが常に 0 を返すということです。これは、ドキュメントに従ってさらに入力が必要であることを意味しますか? ただし、非圧縮がnullでないことを確認しました。出力からバイトを取得するにはどうすればよいですか?

また、最後のブロックでのみ deflater.finish() を呼び出す必要があると思います。これは正しいです?

4

2 に答える 2

1

compresser.finish();の直後に呼び出されるべきだと思いますdeflater.setInput(uncompressed);。次に、次の手順に進みます。問題ないはずです。

以下のようにドキュメントにも同じことが記載されています。

 byte[] output = new byte[100];
 Deflater compresser = new Deflater();
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);

また、初期化時にレベルを設定してください。

 Deflater compresser = new Deflater(Deflater.DEFLATED, false); //<-set the level
 byte[] output = new byte[100];
 compresser.setInput(input);
 compresser.finish();  //<-- finished is called here
 int compressedDataLength = compresser.deflate(output);

お役に立てれば。

于 2012-10-25T21:17:57.097 に答える
0

compresser.finish()最終的な出力を取得するには、呼び出す必要があります。Javadoc を参照してください。複数のバッファがある場合は、DeflaterInputStream.

于 2012-10-26T01:35:38.550 に答える