【问题标题】:flush() java file handlingflush() java 文件处理
【发布时间】:2011-05-01 17:05:35
【问题描述】:

flush() 的具体用途是什么?流和缓冲区有什么区别?为什么需要缓冲区?

【问题讨论】:

    标签: java file-handling


    【解决方案1】:

    缓冲的好处是效率。通常,将一个 4096 字节的块写入文件一次比将一个字节写入 4096 次要快。

    缓冲的缺点是您会错过反馈。到句柄的输出可以保留在内存中,直到写入足够的字节以使其值得写入文件句柄。程序的一部分可能会将一些数据写入文件,但程序的另一部分或其他程序无法访问该数据,直到程序的第一部分将数据从内存复制到磁盘。根据数据写入该文件的速度,这可能需要任意长的时间。

    当您调用flush() 时,您要求操作系统立即将缓冲区中的任何数据写入文件句柄,即使缓冲区未满也是如此。

    【讨论】:

      【解决方案2】:

      数据有时会在实际写入磁盘(在缓冲区中)之前被缓存,刷新会导致缓冲区中的内容被写入磁盘。

      【讨论】:

        【解决方案3】:

        flush 告诉输出流将所有数据发送到底层流。由于内部缓冲,这是必要的。缓冲区的基本目的是尽量减少对底层流 API 的调用。如果我将一个长字节数组存储到FileOutputStream,我不希望Java 每个字节调用一次操作系统文件API。因此,缓冲区在 Java 内部和外部的各个阶段都使用。即使您确实每个字节调用一次fputc,操作系统也不会每次都真正写入磁盘,因为它有自己的缓冲。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-05
          • 2015-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-10
          相关资源
          最近更新 更多