如何刷新'RandomAccessFile'(java)?

Tim*_*per 9 java flush

我在java中使用RandomAccessFile:

file = new RandomAccessFile(filename, "rw");
...
file.writeBytes(...);
Run Code Online (Sandbox Code Playgroud)

如何确保将此数据刷新到操作系统?没有file.flush()方法.(请注意,我实际上并不期望它是物理写入的,我很满意它被刷新到操作系统,因此数据将在tomcat崩溃中存活,但不一定是意外的服务器断电).

我在Linux上使用tomcat6.

Jon*_*len 12

提供.flush()方法的唯一类是实际维护自己的缓冲区的类.由于java.io.RandomAccessFile本身不维护缓冲区,因此不需要刷新.

  • Jim Yingst说:"我应该补充一点,根据我的经验,对于大多数应用程序来说,RandomAccessFile通常都很慢.它是一个万能的交易类;它做了很多不同的事情,但对它们来说并不是特别好你通常可以创建一个流组合,以更高的效率做你想要的." (2认同)

Sta*_*tas 6

仔细看看RandomAccessFile构造函数javadoc:

"rws"和"rwd"模式的工作方式与FileChannel类的force(boolean)方法非常相似,分别传递true和false参数,除了它们始终适用于每个I/O操作,因此通常更有效.如果文件驻留在本地存储设备上,那么当调用此类的方法返回时,可以保证该调用对该文件所做的所有更改都将写入该设备.这对于确保在系统崩溃时不会丢失关键信息非常有用.如果文件不驻留在本地设备上,则不会进行此类保证.


ada*_*ost 5

您可以使用getFD().sync()方法。