Question

J'utilise RandomAccessFile pour effectuer certaines écritures dans un fichier dans le cadre d'une transaction. Avant que je commets ma transaction, je veux être absolument sûr que les données sont écrites sur le disque. Appel sur force(boolean) de la RAF FileChannel semble fournir cette garantie, mais est-ce implicitement appelé quand je ferme le fichier, ou dois-je appeler manuellement?

En outre, que quelqu'un a une idée de ce que fait réellement force(), et dans quelle mesure il peut faire confiance? Est-il possible que le système d'exploitation peut signaler que les données ont été écrites sur le disque, alors qu'en fait, il est toujours assis dans une cache quelque part? Dans quelle mesure ce système d'exploitation / HDD / dépendant du système de fichiers?

Était-ce utile?

La solution

Ceci est complètement FS-dépendante. Mais si vous ne recevez pas (IO) Exception, vous devez faire confiance à la machine virtuelle Java et valider votre transaction. Que vous pouvez faire confiance à votre FS est l'autre question. Par exemple, si vous utilisez ext4 ayant retardé l'attribution activée, vous risquez de perdre des données sur une perte de puissance instantanée, même après RandomAccessFile # force (booléenne) retourné avec succès. La machine virtuelle Java repose sur la FS-API de votre système d'exploitation et ne se soucie pas de la mise en œuvre effective et la configuration.

Et oui, vous devez appeler RandomAccessFile # force (booléenne) avant la fermeture. Que #Fermer invoque #force est à la mise en œuvre du FileChannel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top