私は親切に、すでに(私のファイルはzip形式で圧縮するので)Deflater
で圧縮されbyte[]
を解凍したかったが、 OOM
を回避するいくつかの解決策を提案する。OOMは
public static byte[] decompress(byte[] data){
Inflater inflater = new Inflater();
inflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
byte[] buffer = new byte[data.length+100];
while (!inflater.finished()) {
int count = inflater.inflate(buffer);
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
注:toByteArray()
の内部実装について承知していますが、そのためにあらゆる選択肢を得ていません。
解決方法OOM:JVMにメモリを追加します。 – Andreas
ここでの最初の質問は、なぜByteArrayOutputStreamを使っているのですか?下流のコードが 'InputStream'で動作できないのですか? – EJP