Werden FileChannel.force und FileDescriptor.sync beide benötigt?

8

In https://stackoverflow.com/questions/730521/really- force-file-sync-flush-in-java schreibt der Autor in die Zusammenfassung der Antworten:

  

Verwenden Sie c.force (true) gefolgt von s.getFD (). sync () für Java NIO

Meine Frage ist: Brauchen Sie beide wirklich? Ist nicht stark genug? Sind Force und Sync nicht einfach verschiedene Schnittstellen für das Gleiche? Ich kann nirgendwo finden, wo dies bestätigt wird.

    
njlarsson 13.04.2011, 13:45
quelle

1 Antwort

8

Nach meinem Verständnis ist die richtige Antwort Nein.

FileChannel .force ruft fdatasync oder fsync . Dies kann in jdk / src / solaris / native / sun / nio / ch / FileChannelImpl.c auf dem OpenJDK-Quellcode gesehen werden. FileDescriptor ruft fsync auf (das herauszufinden war komplexer). Ich habe es schließlich auf jvm.cpp zurückverfolgt.

Ich bin der "Autor" der verknüpften Frage. Also habe ich mich geirrt. Was nicht genug ist, ist FileOutputStream.flush. weil es ein No-Op ist. Sie müssen daher entweder erzwingen oder synchronisieren.

    
dmeister 16.04.2011, 22:08
quelle

Tags und Links