ビット単位でファイルを読み取るリーダーを作成しようとしていますが、大きなファイルに問題があります。私は100MBのファイルを読み込もうとしましたが、それは3分以上かかりましたが、うまくいきました。Byte []とjava.lang.OutOfMemoryErrorビット単位でファイルを読み取る
しかし、私は500 MBでファイルを試しましたが、それも開始されませんでした。この行のため:
byte[] fileBits = new byte[len];
現在、私は派生を探していて、何も見つかりません。 誰かがそれを解決したことがあり、コード、ヒント、またはアイデアを共有する可能性があります。
if (file.length() > Integer.MAX_VALUE) {
throw new IllegalArgumentException("File is too large: " + file.length());
}
int len = (int) file.length();
FileInputStream inputStream = new FileInputStream(file);
try {
byte[] fileBits = new byte[len];
for (int pos = 0; pos < len;) {
int n = inputStream.read(fileBits, pos, len - pos);
if (n < 0) {
throw new EOFException();
}
pos += n;
}
inputStream.read(fileBits, 0, inputStream.available());
inputStream.close();
本当にファイル全体が一度に必要ですか?あなたがそれをストリーミングするのを妨げるのは何ですか? –
OutOfMemoryErrorの[検索](https://www.google.com/search?q=OutOfMemoryError)を試しましたか? 'java -mx'を参照してください –
作成する各インデックスは4バイトです。そのうち5億人が2Gのスペースを割り当てようとします。これ以上のメモリやjosh.trowの提案バッファ/ストリーミングなしでは解決できません –