【问题标题】:difference between flush and close function in case of filewriter in javajava中filewriter的flush和close函数的区别
【发布时间】:2012-03-05 13:36:31
【问题描述】:

我想知道 Java 中的 flush 和 close 函数的确切区别是什么?

在写入文件的过程中,当数据被转储到文件中时?

请举例说明

【问题讨论】:

    标签: java io


    【解决方案1】:

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

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

    请注意,如果不调用 flush() 数据仍可以写入相关的 IO 通道 - 只是一些数据可能被缓冲了。

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

    【讨论】:

    • flush() 就够了吗?或者我们应该在 flush 之后调用 close ?如果我想调用flush
    【解决方案2】:

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

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

    【讨论】:

    • 当使用 BufferedWriter(或 BufferedReader)时,我们不必担心 flush() - 只要缓冲区已满,BufferedWriter 就会在“write()”时在内部刷新。
    • 但是最后如果缓冲区既不空也不满,我们想将最后一部分写入磁盘(这几乎总是需要的),我们必须显式地/手动地flush(),这是非常必要的。
    • @WesternGun 否:BufferedWriter 不需要显式调用flush(),只要您close() 编写器即可。 close() 自己执行刷新。
    【解决方案3】:

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

    【讨论】:

    • Jon Skeet 早 15 秒写))
    【解决方案4】:

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

    close():一般关闭Stream,connection,socket。

    flush and close example

    【讨论】:

    • 但是它会在遇到文件中有数据要写入的时候立即刷新文件中的数据或内容吗?
    • 不,它不会立即刷新数据。它会强制输出字节将数据写入流中。当您调用 close 方法时,它会填充数据并指示没有更多数据。跨度>
    【解决方案5】:

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

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

    以下是我从Oracle Java I/O tutorial得到的。

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

    如果你只使用没有缓冲区的fileWriter,使用flush是没有效果的。您唯一需要做的就是关闭流。并且 close 方法会在关闭流之前刷新流。

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

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2012-09-03
      • 2012-12-13
      • 1970-01-01
      • 2013-11-03
      • 2021-02-13
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多