2011-04-13 17 views
8

En https://stackoverflow.com/questions/730521/really-force-file-sync-flush-in-java, escribe el autor en el resumen de las respuestas:.¿Son necesarios FileChannel.force y FileDescriptor.sync?

Uso c.force (verdadero), seguido de s.getFD() sync() para Java NIO

Mi pregunta es: ¿realmente necesitas ambos? ¿No es suficiente fuerza? ¿No se fuerza y ​​sincroniza solo interfaces diferentes para hacer lo mismo? No puedo encontrar ningún lugar donde esto se confirme.

Respuesta

8

Mi entendimiento es que la respuesta correcta es la número

FileChannel .force llama fdatasync o fsync. Esto se puede ver en jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c on del código fuente OpenJDK. FileDescriptor llamadas fsync (Para averiguarlo fue más complejo. Finalmente lo rastreé hasta jvm.cpp).

Soy el "autor" de la pregunta vinculada. Entonces estaba equivocado. Lo que NO es suficiente es FileOutputStream.flush. porque no es operativo. Por lo tanto, necesitas fuerza o sincronización.

Cuestiones relacionadas