Изменение размера, очистка и закрытие 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()
если хотите, в противном случае изменения могут быть отложены.