我正在使用RandomAccessFile作为事务的一部分对文件执行一些写操作。在提交事务之前,我要绝对确定将数据写入磁盘。
在RAF的force(boolean)
上调用FileChannel
似乎提供了这种保证,但是当我关闭文件时是否隐式调用它,还是必须手动调用它?
此外,是否有人对force()
的实际用途以及可信任的范围有任何了解?实际上,OS仍位于某个缓存中时,操作系统是否有可能报告已将数据写入磁盘?此OS / HDD /文件系统在多大程度上依赖于?
最佳答案
这完全取决于FS。但是,如果未收到(IO)Exception,则应信任JVM并提交事务。您是否可以信任自己的FS是另一个问题。例如,如果您使用激活了延迟分配的ext4,则即使在RandomAccessFile#force(boolean)成功返回后,您也可能会因瞬间断电而丢失数据。 JVM依赖于操作系统的FS-API,并不关心实际的实现和配置。
是的,您必须在关闭之前调用RandomAccessFile#force(boolean)。 #close是否调用#force取决于FileChannel的实现。
关于java - RandomAccessFile.close()是否在内部调用FileChannel.force()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1073450/