2017-02-14 3 views
1

На самом деле это три вопроса о том, как работать с файлами с отображением памяти. То, что я делал, работает, но мне не хватает авторитетного ответа.Изменение размера, промывка и закрытие 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 раньше?

ответ

0

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

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

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

Да. Вам не нужно повторно загружать канал. Он по-прежнему действует после setLength().

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

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

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

Любой из них.

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

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

Смежные вопросы