Есть ли способ расширить буфер байт с отображением памяти Java, чтобы новый размер отражался обратно на сопоставленный файл на диске?
Расширение Java-байт-буфера с памятью
Ответ 1
Нет, вам нужно будет отрегулировать размер базового файла и воссоздать буфер с байтами памяти.
RandomAccessFile file = new RandomAccessFile(/* some file */);
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
// Some stuff happens...
// adjust the size
file.setLength(newLength);
// recreate the memory mapped buffer
buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
Примечание. Установка длины файла имеет несколько странное поведение. Если вы пишете файл через карту в определенной позиции, которая находится за пределами файла (используя map.position() или map.putX(position,...)), значения будут добавлены к концу файл и не записывается в том месте, которое вы ожидаете (по крайней мере на Linux). Если это нежелательное поведение, вам нужно будет добавить данные в файл, чтобы действительно увеличить файл.