I/O 概念刷新与同步

2022-09-01 03:01:09

我遇到过这两个术语,我对它们的理解似乎相互重叠。Flush 与缓冲区一起使用,sync 用于讨论将文件更改保存到磁盘。

在 C 中,fflush(stdin) 确保缓冲区被清除。和 fsync 将更改文件保存到磁盘。

如果这些概念没有被普遍定义,则更喜欢linux,java解释。

我找到了一个相关的帖子,但ir并没有真正回答我的问题。在Java中真正强制文件同步/刷新


答案 1

在 Java 中,该方法用于输出流和写入器,以确保将缓冲数据写出。但是,根据Javadocs的说法:flush()

如果此流的预期目标是底层操作系统(例如文件)提供的抽象,则刷新流仅保证将先前写入流的字节传递到操作系统进行写入;它不保证它们实际上被写入物理设备,如磁盘驱动器。

另一方面,可用于确保由操作系统缓冲的数据写入物理设备(磁盘)。这与 Linux/ POSIX 中的调用相同。FileDescriptor.sync()sync

如果您的 Java 应用程序确实需要确保数据以物理方式写入磁盘,则可能需要 和 ,例如:flushsync

FileOutputStream out = new FileOutputStream(filename);

[...]

out.flush();
out.getFD().sync();

引用:


答案 2