我試圖將一個非常大的文件寫入另一個非常大的文件。我在filechannel寫入行收到此錯誤,但我不確定原因。我認爲這是因爲我很長時間才走出數據類型的限制,但長達9,223,372,036,854,775,807,而我最多隻能達到5,372,896,745。任何想法爲什麼發生這種情況? MappedByteBuffer有一些限制嗎?對於較小的文件,這種情況不會發生,並且我還沒有遇到在Java桌面應用程序中使用相同代碼的任何問題。 (只發生在Android上)Android NIO - java.io.IOException:對於定義的數據類型,值太大
File f1 = new File(filename1);
FileChannel fic, foc;
long fsize;
MappedByteBuffer mBUf;
FileOutputStream out = new FileOutputStream(f1,true);
foc = out.getChannel();
File f2 = new File(filename2);
FileInputStream in = new FileInputStream(f2);
fic = in.getChannel();
fsize = fic.size();
for (long b = 0; b < fsize; b += 65536)
{
if (fsize - b < Resource.MEMORY_ALLOC_SIZE)
mBUf = fic.map(FileChannel.MapMode.READ_ONLY, b, fsize - b);
else
mBUf = fic.map(FileChannel.MapMode.READ_ONLY, b, Resource.MEMORY_ALLOC_SIZE);
foc.write(mBUf); //ERROR HERE!
}
fic.close();
in.close();
foc.close();
out.close();
任何想法/反饋讚賞!
我試着去transferTo路線,但它仍然拋出相同的錯誤。 – azdragon2 2012-03-30 21:28:27
@ azdragon2您將不得不嘗試較小的傳輸大小。指定超過大約1兆字節沒有優勢。通過'transferTo()'API的結構,你必須把它放在一個循環中,因爲它不保證傳輸請求的數量。所以要做到這一點,並調整'大小'參數來理智。 – EJP 2012-03-31 00:36:39