大きなファイルセット(それぞれ約2〜3GB)があり、それを読み取ってその一部を新しいファイルに出力するにはInputStream
を使用する必要があります。InputStreamファイルと出力の一部を読み取る
//this is just for example
int size=100;
String src="pathtofile";
OutputStream os = null;
Inputstream is = new FileInputStream(new File(src));
byte[] buffer = new byte[size];
byte[] bufferis = getBytesFromIS(is);
buffer=Arrays.copyOfRange(bufferis,0,buffer.length);
String tempstr=new String(buffer);
byte[] tempBytes=Arrays.copyOfRange(bufferis, buffer.length,is.available());
os = new FileOutputStream(new File(dest));
copy(new ByteArrayInputStream(tempBytes), os); //function writing to file
これは小さなファイルで正常に動作しますが、大きなファイルで使用しているとき、私はまだOutOfMemoryError
を取得し、-Xmx6114m
を設定した場合でも、OutOfMemoryError
を得続けます。
2GBのデータを扱うことができるプリントライターを試してみてください.... – SmashCode
ここでの答えは非常に簡単です。ファイルの一部しか必要としない場合は、ファイル全体を読み取らないでください! 'InputStream'を使う理由はありますか?ストリームはしばしばより汎用性がありますが、この特定のユースケースは 'RandomAccessFile'でもっと簡単に解決できます。 – Marco13
' bufferis'を削除する必要があります。あなたは 'int bytesRead = is.read(buffer);' – roby