Расширение Java буфер байта с отображенной памятью

Существует ли способ развернуть Java, который байт с отображенной памятью буферизует таким образом, что новый размер отражается назад к отображаемому файлу на диске?

11
задан Tim Cooper 25 September 2011 в 13:52
поделиться

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

10
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: