【发布时间】:2011-01-20 01:13:57
【问题描述】:
我现在想澄清一下,并在 FileOutputStream 和 FileChannel 之间画出一些相似之处。
首先,使用标准 Java io 编写文件的最有效方法似乎是使用用 BufferedOutputStream 包装的 FileOutputStream。因为它会在内部缓冲区溢出时自动刷新。能够进行单次写入(单字节、浮点数等)以及数组写入很方便,而且不用担心速度。您永远不应该忘记的唯一一件事是关闭它(执行最后一次刷新)。使用 BufferedOutputStream 包装器的好处是显而易见的,并且必须拥有每个人(我希望)。
现在关于 FileChannel。 FileChannel 有force 方法,相当于FileOutputStream 中的flush,不是吗? 而且javadocs 清楚地说,您应该使用它来确保您对目标文件进行了更改。但是,如果没有“BufferedFileChannel”包装器,我不明白何时以及为什么要使用它。 换句话说,FileChannel 的缓冲在哪里?它是否像 BufferedOutputStream 一样自动隐藏在 FileChannel 本身中?如果没有,那我到底为什么需要强制方法,因为没有什么可以强制(使用 write 方法后所有更改都已应用于文件),我必须自己实现缓冲吗?
【问题讨论】:
标签: java buffering filechannel