Вопрос

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top