Вызывает ли RandomAccessFile.close() внутренний метод FileChannel.force()?

Я использую RandomAccessFile для выполнения некоторых записей в файл как часть транзакции. Прежде чем зафиксировать транзакцию, я хочу быть абсолютно уверенным, что данные записываются на диск. призвание force(boolean) на RAF FileChannel По-видимому, предоставляет эту гарантию, но вызывается ли он неявно, когда я закрываю файл, или мне нужно вызывать его вручную?

Кроме того, кто-нибудь имеет представление о том, что force() на самом деле, и как далеко можно доверять? Возможно ли, что ОС может сообщить, что данные были записаны на диск, хотя на самом деле они все еще находятся в каком-то кеше? Насколько этот OS/HDD/ файловая система зависит?

1 ответ

Решение

Это полностью зависит от FS. Но если вы не получите исключение (IO), вы должны доверять JVM и фиксировать транзакцию. Можете ли вы доверять своей FS - другой вопрос. Например, если вы используете ext4 с активированным отложенным размещением, вы можете потерять данные о мгновенной потере мощности даже после успешного возврата RandomAccessFile#force(логическое значение). JVM опирается на FS-API вашей операционной системы и не заботится о фактической реализации и конфигурации.

И да, вы должны вызвать RandomAccessFile#force(логическое значение) перед закрытием. Призывает ли #close #force к реализации FileChannel.

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