我在我的脑海的一个问题是,虽然写入文件,关闭完成之前,我们应该包括的flush()??。如果是的话它会做什么呢?不要流自动清空? 编辑:

所以冲洗它究竟做什么?

有帮助吗?

解决方案

作家与流通常缓冲一些记忆了输出数据的,并尝试在同一时间将它写在更大的块。冲洗会导致磁盘立即写入从缓冲区,因此,如果程序崩溃的数据不会丢失。当然,也不能保证,因为磁盘可能不是物理立即写入数据,因此它可能仍然会丢失。但是,那就不是Java程序的故障:)

PrintWriters自动冲洗(默认)当你写结束的行,当然流和冲洗缓冲器的当关闭它们。除此之外,这里只有冲洗时的缓冲区已满。

其他提示

我会强烈建议调用close之前刷新。基本上它写入剩余数据bufferized到文件中。

如果你调用flush明确你可以肯定,任何IOException出来close是真正灾难性的,涉及到释放系统资源。

flush自己,你可以为你处理你的数据写入异常处理其IOException以同样的方式。

您不需要做冲洗,因为close()方法会为你做到这一点。

根据JavaDoc:

“关闭该流,第一刷新它。一旦流已关闭,还写()或冲洗()调用将导致抛出IOException。关闭以前封闭流,但是,没有任何影响。”

要回答你的问题,以什么冲水实际上做,它可以确保任何你已经写入流 - 在您的案件文件 - 没有真正得到写入文件那里,然后。

Java可以执行缓冲,这意味着它将保持到写在存储器中的数据,直到它有一定的量,然后将其所有写入一气呵成这是更有效的文件。这种方法的缺点是,该文件并不一定在任何给定的时间上最新的。同花顺是说“使文件上最新的一种方式。

关闭调用flush首先要保证后关闭该文件有你所期望的在里面看到的,因此,正如其他人所指出的那样,没有必要关闭之前刷新。

关闭自动冲洗。你不需要调用它。

有在()只是一个close()方法之前调用flush没有意义的,因为其他人说。时间使用冲水()是,如果你保持文件打开,但要确保先前写入已全面完成。

至于说,你通常不会需要刷新。

它才有意义,如果出于某种原因,你想另一个进程看到你正在使用的文件的全部内容,而不将其关闭。例如,它可以被用于被多个进程同时修改的文件,尽管小心的LOT: - )

FileWriter是一个邪恶的类作为它拿起任何字符集恰好在那里,而不是采取一个明确的字符集。即使你想默认的,是明确了。

通常的解决办法是OutputStreamWriterFileOutputStream。这是可能的装饰抛出异常。因此,你需要能够关闭即使从未建造的作家流。如果你要做到这一点,你只需要刷新作家(在开心的情况下),并始终关闭流。 (只要是混乱,一些装饰,例如用于处理拉链,有确实需要关闭的资源。)

另一个用例用于冲洗程序正在写longrunning工作到文件(因此它可以停止和重新启动以后,你想,以确保数据在硬盘上安全的进步。

while (true) {
  computeStuff();
  progresss += 1;
  out.write(String.format("%d", progress));
  out.flush();
}
out.close();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top