RandomAccessFile.close()内部调用FileChannel.force()吗?

时间:2009-07-02 09:39:07

标签: java transactions integrity random-access filechannel

我使用RandomAccessFile作为事务的一部分对文件执行一些写操作。在我提交事务之前,我想绝对确保将数据写入磁盘。 在RAF的force(boolean)上调用FileChannel似乎提供了此保证,但是当我关闭文件时是否会隐式调用,或者我是否必须手动调用它?

此外,是否有人了解force()实际上做了什么,以及它可以信任多远?操作系统是否可能会报告数据已写入磁盘,而实际上它仍然位于某个缓存中?这个OS / HDD /文件系统依赖于什么程度?

1 个答案:

答案 0 :(得分:0)

这完全取决于FS。但是如果你没有得到(IO)异常,你应该相信JVM并提交你的事务。你是否可以信任你的FS是另一个问题。例如,如果您使用ext4激活了延迟分配,即使在RandomAccessFile#force(boolean)成功返回后,您也可能会在即时断电时丢失数据。 JVM依赖于操作系统的FS-API,而不关心实际的实现和配置。

是的,你必须在关闭之前调用RandomAccessFile #force(boolean)。 #close是否调用#force取决于FileChannel的实现。