【发布时间】:2012-03-05 13:36:31
【问题描述】:
我想知道 Java 中的 flush 和 close 函数的确切区别是什么?
在写入文件的过程中,当数据被转储到文件中时?
请举例说明
【问题讨论】:
我想知道 Java 中的 flush 和 close 函数的确切区别是什么?
在写入文件的过程中,当数据被转储到文件中时?
请举例说明
【问题讨论】:
flush() 只是 确保将任何缓冲数据写入磁盘(在这种情况下 - 更一般地说,通过您正在使用的任何 IO 通道刷新)。之后您仍然可以写入流(或写入器)。
close() 刷新数据并表示没有更多数据。它关闭任何文件句柄、套接字或其他任何东西。然后您就不能再写入流(或写入器)了。
请注意,如果不调用 flush() 数据仍可以写入相关的 IO 通道 - 只是一些数据可能被缓冲了。
close() 通常也会调用flush(),但最近有人向我指出,在某些 JDK 实现中,作为关闭的一部分由刷新引发的任何异常都会被吞没:(
【讨论】:
flush() 将缓冲区的内容写入目标,并使缓冲区为空以存储更多数据,但它不会永久关闭流。这意味着您仍然可以向流中写入更多数据。
但是 close() 会永久关闭流。如果您想进一步写入一些数据,则必须再次重新打开流并将数据附加到现有数据中。
【讨论】:
flush()它,这是非常必要的。
flush(),只要您close() 编写器即可。 close() 自己执行刷新。
flush() 将缓冲区的内容刷新到目标。您可以再次向流中写入内容。close() 将内容刷新到目标并关闭流。在close() 之后你不能再写任何东西了。
【讨论】:
flush() :要刷新输出流,请使用DataOutputStream 类的void flush() 方法。此方法在内部调用底层OutputStream 类的flush() 方法,该方法强制将任何缓冲的输出字节写入流中。
close():一般关闭Stream,connection,socket。
【讨论】:
flush 方法会将流中的所有内容刷新到目标。写完东西后,可能不在目的地。
close 方法将关闭流并在关闭前执行刷新。
以下是我从Oracle Java I/O tutorial得到的。
要手动刷新流,请调用其刷新方法。 flush 方法对任何输出流都有效,但除非流被缓冲,否则无效。
如果你只使用没有缓冲区的fileWriter,使用flush是没有效果的。您唯一需要做的就是关闭流。并且 close 方法会在关闭流之前刷新流。
如果我理解正确,似乎只要我们记得关闭流,我们就可以了。
【讨论】: