Изменение размера, очистка и закрытие ByteBuffer

На самом деле это три вопроса о том, как работать с отображенными в память файлами. То, что я сделал, работает, но мне не хватает авторитетного ответа.

Я получаю свой ByteBuffer как следует:

raf = new RandomAccessFile(file, isReadonly ? "r" : "rw");
channel = raf.getChannel();
buffer = channel.map(mode, 0, channel.size());

Для изменения размера, кажется, работает следующее

raf.setLength(newLength);
channel = raf.getChannel();

без звонка raf.getChannel(), но действительно ли это правильно?


Согласно Javadoc, позвонив force следует промыть его (я использую локальный диск). Мне просто интересно, как получается, что он заявляет, что нет IOException и что будет, если не получится?


Что я должен закрыть? RandomAccessFile, FileChannelили их обоих? Должен ли я позвонить некоторым flush или же MappedByteBuffer.force до?

1 ответ

Для изменения размера, кажется, работает следующее

raf.setLength(newLength);
channel = raf.getChannel();

без вызова raf.getChannel(), но действительно ли это правильно?

Да. Вам не нужно повторно приобретать канал. Это все еще действует после setLength(),

Согласно Javadoc, позвонив force() следует промыть его (я использую локальный диск). Мне просто интересно, как получается, что он заявляет, что нет IOException и что будет, если не получится?

Вы, кажется, говорите здесь о MappedByteBuffer.force (). Я не могу объяснить выбор дизайнера.

Что я должен закрыть? RandomAccessFile, FileChannel или оба из них?

Любой из них.

Должен ли я позвонить некоторым flush() или же MappedByteBuffer.force() до?

Здесь нет flush(), Ты можешь позвонить force() если хотите, в противном случае изменения могут быть отложены.

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