java.util.zip.Deflaterのdeflateメソッドを使用する場合、引数としてbyte []を指定する必要がありますが、そのbyte []はどのくらいの大きさに初期化する必要がありますか?圧縮されたデータが非圧縮のデータよりもさらに小さくなるという保証はないことを読みました。入力の特定の%を使用する必要がありますか?現在、入力の2倍の大きさにしています
3341 次
2 に答える
8
を呼び出した後deflate
、 を呼び出しfinished
て、まだ出力するものがあるかどうかを確認します。例えば:
byte[] buffer = new byte[BUFFER_SIZE];
while (!deflater.finished()) {
int n = deflater.deflate(buffer);
// deal with the n bytes in out here
}
メモリ内のすべてのバイトを収集するだけの場合は、ByteArrayOutputStream を使用できます。例えば:
byte[] buffer = new byte[BUFFER_SIZE];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (!deflater.finished()) {
int n = deflater.deflate(buffer);
baos.write(buffer, 0, n);
}
return baos.toByteArray();
于 2009-07-30T16:58:09.097 に答える
7
Java がクラスのスペルを「デフレーター」と間違えるのはなぜですか? 「デフレーター」という言葉です。ジーズ!申し訳ありませんが、胸からそれを取り除かなければなりませんでした。
前述のように、予想される使用法はdeflate
、圧縮からすべての出力を取得するまで呼び出し続けることです。ただし、本当に1 回の呼び出しで実行したい場合は、deflate がデータを拡張できる量に制限があります。zlibには、Java が残念ながら利用できない関数があり、deflateBound()
その上限を提供します。関連する行をここにコピーして、その関数の保守的な境界を使用できます。
complen = sourceLen +
((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
于 2013-02-04T03:27:47.180 に答える