FileChannel.size () гарантированно вернет правильный размер (включая ожидающие обновления) в Sun JVM? - PullRequest
1 голос
/ 17 марта 2011

В Sun JVM гарантированно ли метод FileChannel.size () возвращает правильный размер файла, включая любые ожидающие обновления?Другими словами, гарантированно пройден следующий тест (при условии, что в файл ничего не записывается):

RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
FileChannel fileChannel = randomAccessFile.getChannel();
fileChannel.write(buffer);
long size1 = fileChannel.size();
fileChannel.force(true);
long size2 = fileChannel.size();
assertEquals(size1, size2);

1 Ответ

3 голосов
/ 17 марта 2011

Нет сильных гарантий, IMO.Это будет зависеть от ОС.Но из того, что я вижу, размеры должны быть равны ...

Подробнее:

force (true) в linux реализуется через fsync (fd) , в windows эторавно FlushFileBuffers .

Однако вы не проверяете, закончилась ли запись запись (buffer.hasRemaining()), я не уверен, что какой-либо из impl разрешает асинхронную запись Windows , Linux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...