Pregunta

Estoy utilizando RandomAccessFile para realizar algunas operaciones de escritura en un archivo como parte de una transacción. Antes encomiendo mi operación, quiero estar absolutamente seguro de que los datos se escriben en el disco. Llamando force(boolean) en FileChannel de la RAF parece ofrecer esta garantía, pero es llamado implícitamente cuando cierro el archivo, o tengo que llamar manualmente?

Además, ¿Alguien tiene alguna idea de lo que realmente hace force(), y hasta qué punto se puede confiar? ¿Es posible que el sistema operativo puede informar de que los datos se hayan escrito en el disco, cuando en realidad está todavía sentado en alguna caché en alguna parte? ¿En qué medida este OS / HDD / sistema de archivos dependientes?

¿Fue útil?

Solución

Esto es completamente FS-dependiente. Pero si usted no recibe una excepción (IO), usted debe confiar en la JVM y comprometer su transacción. Si se puede confiar en sus FS es la otra pregunta. Por ejemplo, si ext4 sirve tener activado asignación de retraso, es posible que pierda datos en una pérdida de potencia instantánea, incluso después de RandomAccessFile # vigor (booleano) devuelve correctamente. La JVM se basa en la FS-API del sistema operativo y no se preocupa por la aplicación efectiva y la configuración.

Y sí, usted tiene que llamar RandomAccessFile # vigor (booleano) antes del cierre. Ya sea #Cerrar invoca #force depende de la implementación de la FileChannel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top