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.
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.