java刷新文件_真正在Java中强制文件同步/刷新

Java 如何 真正 将写入文件的数据与块设备进行刷新/同步。

我用NIO尝试了这段代码:

FileOutputStream s = new FileOutputStream(filename)

Channel c = s.getChannel()

while(xyz)

c.write(buffer)

c.force(true)

s.getFD().sync()

c.close()

我认为c.force(true)与s.getFD()。sync()一起应该足够了,因为强制状态的文档

强制对此通道文件的任何更新都写入包含它的存储设备。如果此通道的文件位于本地存储设备上,则当此方法返回时,可以保证自创建此通道以来,或自上次调用此方法以来,对该文件所做的所有更改都将被写入该设备。这对于确保在系统崩溃时不会丢失关键信息很有用。

同步状态说明文件:

强制所有系统缓冲区与基础设备同步。在此FileDescriptor的所有修改后的数据和属性都已写入相关设备之后,此方法返回。特别是,如果此FileDescriptor引用物理存储介质,例如文件系统中的文件,则在与该FileDesecriptor关联的缓冲区的所有内存中已修改副本已写入物理介质之前,同步不会返回。sync是由需要物理存储(例如文件)处于已知状态的代码使用的。

这两个调用应该足够了。是吗?我想不是。

背景:我使用C / Java进行了较小的性能比较(2 GB,顺序写入),Java版的速度是C版的两倍,并且可能比硬件(单个HD上的120 MB /

s)快。我还尝试与Runtime.getRuntime()。exec(“ sync”)执行命

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值