java中filewriter的flush和close函数之间的区别

时间:2012-02-14 06:21:08

标签: java io

我需要知道Java中flush和close函数之间的确切区别是什么?

并且在写入文件期间将数据转储到文件中?

请提供一个例子

5 个答案:

答案 0 :(得分:60)

flush() 只是确保将任何缓冲的数据写入磁盘(在这种情况下 - 更常见的是,通过您正在使用的任何IO通道刷新)。之后你仍然可以写入流(或作家)。

close()刷新数据并表示没有更多数据。它会关闭任何文件句柄,套接字或其他任何东西。然后,您无法再写入流(或编写器)。

请注意,如果没有调用flush()数据仍然会被写入相关的IO通道 - 只是某些数据可能被缓冲。

close()通常也会调用flush(),但最近有人向我指出,在某些JDK实现中,吞下作为结束的一部分而抛出的任何异常都会被吞噬:(

答案 1 :(得分:35)

flush()将缓冲区的内容写入目标,并使缓冲区为空,以便存储更多数据,但不会永久关闭流。这意味着您仍然可以向流中写入更多数据。

但close()会永久关闭流。如果你想进一步写一些数据,那么你必须再次重新打开流,并用现有的数据附加数据。

答案 2 :(得分:4)

flush()将缓冲区的内容刷新到目标。然后您可以再次向流中写入内容。close()将内容刷新到目标并关闭流。在close()之后,你不能再写任何东西了。

答案 3 :(得分:3)

flush() :要刷新输出流,请使用void flush()类的DataOutputStream方法。此方法在内部调用底层flush()类的OutputStream方法,该方法强制将任何缓冲的输出字节写入流中。

close() :它通常关闭Stream,连接,套接字。

请参阅flush and close example

答案 4 :(得分:0)

flush方法会将所有流中的内容刷新到目标位置。写东西后,它可能不在目的地。

close方法将关闭流并在关闭之前进行刷新。

以下是我从Oracle Java I/O tutorial获得的信息。

  

要手动刷新流,请调用其flush方法。刷新方法对任何输出流均有效,但除非对该流进行缓冲,否则该方法无效。

如果仅使用没有缓冲区的fileWriter,则使用冲洗无效。您唯一需要做的就是关闭流。并且close方法将在关闭流之前冲洗流。

如果我理解正确,似乎只要我们记得关闭流,我们就很好。