我需要知道Java中flush和close函数的确切区别是什么?
以及在文件写入期间数据何时被转储到文件中?
请提供一个例子。
flush()
函数确保将任何缓冲的数据写入磁盘(在这种情况下-通常为刷新您使用的任何IO管道)。之后仍可以向流(或writer)写入数据。
close()
函数刷新数据并指示没有更多数据。它关闭任何文件句柄、套接字或其他内容。此后就无法再向流(或writer)写入数据。
请注意,没有调用flush()
函数时,仍然可以向相关的IO管道写入数据-只是可能会缓冲一些数据。
close()
通常也会调用flush()
函数,但最近有人指出,在某些JDK实现中,作为关闭的一部分而导致刷新抛出的任何异常都将被忽略 :(
flush()函数将缓冲区的内容写入目标并清空缓冲区,但不会永久关闭流。这意味着,您仍然可以向该流写入更多数据。
而close()函数则永久关闭流。如果您想继续写入一些数据,则需要重新打开流并将新数据与现有数据一起追加。
flush()
它,这非常必要。 - WesternGunflush()
来刷新 BufferedWriter,只要你调用 close()
方法关闭写入器即可。close()
方法会自动执行刷新操作。 - gslflush()
方法将缓冲区内容刷新到目标位置。你可以再次向流中写入内容。close()
方法将缓冲区内容刷新到目标位置并关闭流。在 close()
之后,你不能再写入任何内容。
flush()
:为了刷新输出流,请使用DataOutputStream
类的void flush()
方法。该方法内部调用底层OutputStream
类的flush()
方法,强制将任何缓冲的输出字节写入流中。
close()
:通常关闭流、连接和套接字。
flush方法将刷新流中的所有内容到目标位置。写入内容后,可能不在目标位置。
close方法将关闭流并在关闭之前执行刷新操作。
以下是我从Oracle Java I/O教程中获得的信息。
要手动刷新流,请调用其flush方法。 flush方法适用于任何输出流,但除非流具有缓冲区,否则没有效果。
如果您仅使用fileWriter而没有缓冲区,则使用flush没有效果。您唯一需要做的就是关闭流。而close方法将在关闭流之前刷新流。
如果我理解正确,只要我们记得关闭流,就可以了。