Перемещение памяти в файл подстановки памяти
Я пытаюсь настроить файл подкачки для растровых изображений разных размеров, используя MappedByteBuffer для отображения памяти в файле. Я хочу иметь возможность перемещать память в этом файле, поэтому, возможно, два подвопроса:
- Есть ли способ сказать ByteBuffer для перемещения кусков памяти в другой индекс, или
- Можно ли напрямую получить доступ к сырой отображенной памяти, чтобы сделать перемещение самостоятельно.
1 ответ
Решение
Хорошо, я нашел способ сделать это, используя файловый канал, который отображается MappedByteBuffer для передачи памяти внутри себя.
RandomAccessFile raFile = new RandomAccessFile(MyFile, "rw");
FileChannel fileChannel = raFile.getChannel();
fileChannel.position(srcPosition);
fileChannel.transferFrom(fileChannel, dstPosition, count);
Это примерно в 200 раз быстрее (точнее: в два раза быстрее при чтении 1/100 части данных), чем чтение int по int из MappedByteBuffer и запись его для дублирования, указывающего на другую позицию в том же файле.