sma*_*007 35 java file-io operating-system
我遇到过这两个术语,我对它们的理解似乎相互重叠.Flush与缓冲区一起使用,同步用于讨论文件到磁盘的持久更改.
在C中,fflush(stdin)确保清除缓冲区.并且fsync持久化将文件更改为磁盘.
如果这些概念不是普遍定义的,那就更喜欢linux,java的解释.
我发现了一个相关的帖子,但是我并没有真正回答我的问题.真的在Java中强制文件同步/刷新
Gro*_*uez 69
在Java中,该flush()方法用于输出流和写入器,以确保写出缓冲的数据.然而,根据Javadocs:
如果该流的预期目的地是由底层操作系统提供的抽象,例如文件,则刷新流仅保证先前写入流的字节被传递到操作系统以进行写入; 它不能保证它们实际上写入物理设备,如磁盘驱动器.
另一方面,FileDescriptor.sync()可用于确保将OS缓冲的数据写入物理设备(磁盘).这与syncLinux/POSIX中的调用相同.
如果您的Java应用程序确实需要确保将数据物理写入磁盘,则可能需要flush和sync,例如:
FileOutputStream out = new FileOutputStream(filename);
[...]
out.flush();
out.getFD().sync();
Run Code Online (Sandbox Code Playgroud)
参考文献: