Ha RandomAccessFile.close () chiamata internamente FileChannel.force ()?
-
21-08-2019 - |
Domanda
Sto usando RandomAccessFile di eseguire alcune operazioni di scrittura su un file come parte di una transazione. Prima di affido la mia transazione, voglio essere assolutamente sicuri che i dati vengono scritti su disco.
Chiamata force(boolean)
sul FileChannel
della RAF sembra fornire questa garanzia, ma è chiamato implicitamente quando chiudo il file, o devo chiamare manualmente?
Inoltre, qualcuno ha qualche indicazioni su ciò che realmente fa force()
, e fino a che punto ci si può fidare? E 'possibile che il sistema operativo può segnalare che i dati sono stati scritti su disco, quando in realtà è ancora seduto in qualche nascondiglio da qualche parte? Fino a che punto è questo OS / HDD / system-dipendente?
Soluzione
Questo è completamente FS-dipendente. Ma se non si ottiene un (IO) Eccezione, si dovrebbe fiducia la JVM e si impegnano la transazione. Sia che ci si può fidare tuoi FS è l'altra domanda. Per esempio, se si utilizza ext4 aver allocazione ritardata attivato, si potrebbe perdere i dati su una perdita di potenza istantanea, anche dopo RandomAccessFile # vigore (booleano) ha restituito con successo. La JVM si basa sulla FS-API del sistema operativo e non si preoccupa per l'implementazione e la configurazione attuale.
E sì, si deve chiamare RandomAccessFile # vigore (booleano) prima della chiusura. Sia #Chiudi invoca #force è fino alla realizzazione del FileChannel.