首页 > 解决方案 > FileWriter 和 BufferedWriter 中的缓冲区

问题描述

的 apiFileWriter以这些话开头:

“使用默认缓冲区大小将文本写入字符文件。”

的 apiBufferedWriter以这些话开头:

“将文本写入字符输出流,缓冲字符 [...]”

因此,显然这两个类都在使用缓冲区。不幸的是,api 没有解释这两种缓冲区之间的区别。

所以,我问自己:区别在哪里?

标签: javafilewriterbufferedwriter

解决方案


当您有多个写入时,BufferedWriter 效率更高。它保存了小写入并在一个大块中写入。下面是 BufferedWriter 的 write() 方法,它检查缓冲区是否已满if (nextChar >= nChars)并刷新缓冲区。

public void write(int c) throws IOException {
    synchronized (lock) {
        ensureOpen();
        if (nextChar >= nChars)
            flushBuffer();
        cb[nextChar++] = (char) c;
    }
}

至于 FileWriter,每次写入都会进行一次系统调用,而 BufferedWriter 会在缓冲区满后进行系统调用。所以如果你有多个小写,BufferedWriter 会更有效。


推荐阅读