AsynchronousFileChannel.write(...)
方法时,会返回一个Future
对象,通过调用Future.get()
方法可以等待操作完成。
当get()
方法返回后,数据已经写入磁盘还是只是写入了页面缓存呢?
需要说明的是,我关心的是Linux和ext4平台。
AsynchronousFileChannel.write(...)
方法时,会返回一个Future
对象,通过调用Future.get()
方法可以等待操作完成。
当get()
方法返回后,数据已经写入磁盘还是只是写入了页面缓存呢?
需要说明的是,我关心的是Linux和ext4平台。
Future
上的 get
方法返回后,仍然有一些操作系统级别的缓存可能会阻止内容被写入磁盘。如果你想确保,我认为你必须在 Future
返回后执行一个 force
。
相关摘录:
强制将此通道文件的任何更新写入包含它的存储设备。如果此通道文件驻留在本地存储设备上,则当此方法返回时,可以保证自创建此通道以来或自上次调用此方法以来对文件所做的所有更改都已写入该设备。这对于确保关键信息在系统崩溃时不会丢失非常有用。如果文件不驻留在本地设备上,则不提供这样的保证。