Перемещение памяти в файл подстановки памяти

Я пытаюсь настроить файл подкачки для растровых изображений разных размеров, используя 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 и запись его для дублирования, указывающего на другую позицию в том же файле.

Другие вопросы по тегам