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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top