FileWriter和BufferedWriter中的缓冲区

时间:2019-01-14 13:30:12

标签: java filewriter bufferedwriter

FileWriter的api以以下单词开头:

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

BufferedWriter的api以以下单词开头:

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

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

所以,我问自己:有什么区别?

2 个答案:

答案 0 :(得分:0)

当您进行多次写入时,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会更高效。

答案 1 :(得分:0)

BufferedWriter在性能上比react-native run-ios有更好的缓冲区写入实现

  

除非需要即时输出,否则建议将BufferedWriter包装在其write()操作可能代价很高的任何Writer周围,例如FileWriters和OutputStreamWriters。例如,

FileWriter

对于缓冲,PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out"))); 扩展了OutputStreamWriter,这也指向同时使用FileWriter

  

为获得最高效率,请考虑将OutputStreamWriter包装在BufferedWriter中,以避免频繁的转换器调用。