Вопрос

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

Это было полезно?

Решение

Нет, вам нужно будет настроить размер базового файла и воссоздать память сопоставленного байтового буфера.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top