MappedByteBuffer を使用してファイルをメモリ マップすることにより、さまざまなサイズのビットマップのスワップ ファイルを設定しようとしています。このファイル内でメモリを移動できるようにしたいので、おそらく2つのサブ質問があります。
- ByteBuffer にメモリのチャンクを別のインデックスに移動するように指示する方法はありますか、または
- 生のマップされたメモリに直接アクセスして、自分で移動することは可能ですか?
MappedByteBuffer を使用してファイルをメモリ マップすることにより、さまざまなサイズのビットマップのスワップ ファイルを設定しようとしています。このファイル内でメモリを移動できるようにしたいので、おそらく2つのサブ質問があります。
OK、これを行う方法を見つけました。これは、MappedByteBuffer によってマップされたファイルチャネルを使用して、それ自体でメモリを転送することです。
RandomAccessFile raFile = new RandomAccessFile(MyFile, "rw");
FileChannel fileChannel = raFile.getChannel();
fileChannel.position(srcPosition);
fileChannel.transferFrom(fileChannel, dstPosition, count);
これは、MappedByteBuffer から int ごとに読み取り、同じファイル内の別の位置を指すように複製するために書き込むよりも、約 200 倍高速です (正確には、データ部分の 1/100 を読み取る場合は 2 倍の速さ)。