Frage

Ich bin mit Random einige Schreiben in eine Datei als Teil einer Transaktion durchzuführen. Bevor ich meine Transaktion verpflichten, will ich absolut sicher sein, dass die Daten auf der Festplatte geschrieben werden. Der Aufruf force(boolean) auf der FileChannel der RAF scheint diese Garantie zu bieten, aber ist es implizit aufgerufen, wenn ich die Datei zu schließen, oder muss ich manuell anrufen?

Auch hat jemand irgendeinen Einblick in das, was force() tatsächlich der Fall ist, und wie weit sie trauen? Ist es möglich, dass das Betriebssystem berichten kann, dass die Daten auf der Platte geschrieben wurden, wenn in der Tat es ist immer noch irgendwo in einem Cache zu sitzen? Inwieweit ist dieses O / HDD / Dateisystem-abhängig?

War es hilfreich?

Lösung

Das ist völlig FS abhängig. Aber wenn Sie nicht über eine (IO) Ausnahme erhalten, sollten Sie die JVM vertrauen und Ihre Transaktion verpflichten. Egal, ob Sie können Ihre FS vertrauen ist die andere Frage. Zum Beispiel, wenn Sie ext4 verzögerte Zuweisung aktiviert verwenden zu müssen, können Sie Daten auf einer sofortigen Verlustleistung verlieren auch nach Random # Kraft (boolean) erfolgreich zurückgekehrt. Die JVM basiert auf der FS-API des Betriebssystems und kümmert sich nicht um die tatsächliche Umsetzung und Konfiguration.

Und ja, Sie haben vor dem Schließen Random # Kraft (boolean) zu nennen. Ob # Schließen #force rufen bis zu dem Filechannel-Implementierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top