在java.io.FileWriter中刷新

i2i*_*eya 29 java flush stream filewriter

我有一个问题,在写入文件时,在关闭之前,我们应该包括flush()?? 如果是这样它会做什么呢?不流自动冲洗?编辑:

那么冲洗它实际上做了什么?

Car*_*icz 22

写入器和流通常会将一些输出数据缓冲在内存中,并尝试一次将其写入更大的块中.刷新将导致从缓冲区立即写入磁盘,因此如果程序崩溃,则数据不会丢失.当然不能保证,因为磁盘可能不会立即物理写入数据,因此它仍然可能丢失.但那不会是Java程序的错:)

当您编写行尾时,PrintWriters会自动刷新(默认情况下),当然,当您关闭它们时,流和缓冲区会刷新.除此之外,只有当缓冲区已满时才会刷新.

  • 默认情况下,PrintWriters不会自动刷新.要获得一个自动刷新,你必须使用PrintWriter(OutputStream,boolean)构造函数显式地请求它. (16认同)

Ale*_*yak 21

我强烈建议在关闭之前调用flush.基本上它将剩余的缓冲数据写入文件.

如果你flush明确地打电话,你可能会确定任何IOException出现的close都是灾难性的并且与释放系统资源有关.

当您flush自己时,您可以IOException像处理数据写入异常一样处理它.


Ben*_*enj 13

您不需要执行刷新,因为close()将为您执行此操作.

来自javadoc:

"关闭流,首先刷新它.一旦流关闭,进一步的write()或flush()调用将导致抛出IOException.然而,关闭先前关闭的流没有任何效果."

  • 我唯一一次使用flush是因为我在某种进程间通信中使用了流.例如,可能有一个进程正在写入命名管道而另一个进程正在从中读取.我不想关闭管道的文件句柄,因为我稍后会写更多,但我想确保所有数据都已刷新到命名管道,以便其他进程拥有它. (2认同)