非常に大きなファイルを別の非常に大きなファイルに書き込もうとしています。私は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
@ azdragon2転送サイズを小さくする必要があります。約1メガバイト以上を指定する利点はありません。 'transferTo()' APIの構造によって、要求された量を転送することを保証しないので、とにかくそれをループに入れなければなりません。だからそれを行い、 'サイズ'パラメータを何かに調和させる。 – EJP