この標準コードを使用していますが、メモリが不足しています。 GoogleグーバのBytestream.toArrayとIOUtils.toByteArrayを試しましたが、運はありません。目的は、入力ストリームをさらに処理するために、大きなバイナリの入力ストリームの長さを取得することです。また、ファイルシステムを使用するという制約があります。大きな入力ストリームのJavaサイズがメモリ不足の場合
byte[] data = new byte[4096];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
メモリに大量のデータを保存する予定がある場合(通常はお勧めできません)、大量のメモリが必要です。 JVMにもっと多くのメモリを与えるか、スマートな設計を考えてください。 – Kayaman
私はそのスマートなデザインを探しています:-)。 1つの選択肢は、入力ストリームをファイルシステムに保存することでしたが、残念ながらこのオプションは使用できません。私は入力ストリームの長さを計算し、その入力ストリームで特定のアクションを実行する必要があるという制約があります。 – Gopal
あなたの唯一の目標が全体のサイズを見つけることであるならば、なぜあなたは全体のことを記憶に残していますか?後で使うためにあなたが書いたデータをバッファに保存していますか? – litelite