Java I/O概念刷新与同步
我遇到过这两个术语,我对它们的理解似乎相互重叠。Flush与缓冲区一起使用,sync用于讨论将文件的更改持久化到磁盘 在C语言中,fflush(stdin)确保缓冲区被清除。和fsync将更改文件持久化到磁盘 如果这些概念没有得到普遍的定义,我们更愿意使用linux、java解释 我找到了一个相关的帖子,但ir并没有真正回答我的问题 在Java中,在输出流和写入程序中使用Java I/O概念刷新与同步,java,file-io,operating-system,Java,File Io,Operating System,我遇到过这两个术语,我对它们的理解似乎相互重叠。Flush与缓冲区一起使用,sync用于讨论将文件的更改持久化到磁盘 在C语言中,fflush(stdin)确保缓冲区被清除。和fsync将更改文件持久化到磁盘 如果这些概念没有得到普遍的定义,我们更愿意使用linux、java解释 我找到了一个相关的帖子,但ir并没有真正回答我的问题 在Java中,在输出流和写入程序中使用flush()方法来确保写入缓冲数据。然而,根据Javadocs: 如果该流的预期目的地是底层操作系统提供的抽象,例如文件,则
flush()
方法来确保写入缓冲数据。然而,根据Javadocs:
如果该流的预期目的地是底层操作系统提供的抽象,例如文件,则刷新该流保证仅将先前写入该流的字节传递给操作系统进行写入;它不能保证它们实际上被写入到物理设备(如磁盘驱动器)中
另一方面,FileDescriptor.sync()
可用于确保操作系统缓冲的数据写入物理设备(磁盘)。这与Linux/POSIX中的sync
调用相同
如果Java应用程序确实需要确保数据以物理方式写入磁盘,则可能需要刷新
和同步
,例如:
FileOutputStream out = new FileOutputStream(filename);
[...]
out.flush();
out.getFD().sync();
参考资料: