我需要知道Java中flush和close函数之间的确切区别是什么?
并且在写入文件期间将数据转储到文件中?
请提供一个例子
答案 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,连接,套接字。
答案 4 :(得分:0)
flush方法会将所有流中的内容刷新到目标位置。写东西后,它可能不在目的地。
close方法将关闭流并在关闭之前进行刷新。
以下是我从Oracle Java I/O tutorial获得的信息。
要手动刷新流,请调用其flush方法。刷新方法对任何输出流均有效,但除非对该流进行缓冲,否则该方法无效。
如果仅使用没有缓冲区的fileWriter,则使用冲洗无效。您唯一需要做的就是关闭流。并且close方法将在关闭流之前冲洗流。
如果我理解正确,似乎只要我们记得关闭流,我们就很好。