Расширение 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). Если это нежелательное поведение, вам нужно будет добавить данные в файл, чтобы действительно увеличить файл.