繁体   English   中英

RandomAccessFile.close()是否在内部调用FileChannel.force()?

[英]Does RandomAccessFile.close() internally call FileChannel.force()?

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

此外,是否有人对force()实际force()有任何见识,以及它可以被信任的程度? 实际上,OS仍坐在某个缓存中时,操作系统是否可能报告已将数据写入磁盘? 此OS / HDD /文件系统在多大程度上依赖于?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM