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

mum*_*mum 38 java io

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

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

请举一个例子

Jon*_*eet 66

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

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

注意,如果没有将呼叫flush()数据可以仍然被写入有关的IO通道-它只是一些数据可能被缓冲.

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


Cha*_*har 41

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

但close()会永久关闭流.如果要进一步编写一些数据,则必须再次重新打开流并将数据附加到现有数据中.

  • 但是最后,如果缓冲区不为空也不是完全__,并且我们想将最后一部分写入磁盘(几乎总是需要),我们必须显式/手动`flush()`__,这是非常必要的。 (2认同)
  • @WesternGun 否: BufferedWriter 不需要显式调用 `flush()`,只要您 `close()` 编写器。`close()` 自己执行刷新。 (2认同)

shi*_*t66 5

flush()将缓冲区的内容刷新到目的地。您可以再次将内容写入流中。close()将内容刷新到目的地并关闭流。以后close()再也写不下去了。

  • 乔恩·斯基特 (Jon Skeet) 早于 15 秒写道)) (2认同)