缓冲的读写器

时间:2019-09-12 14:25:00

标签: java

因此,我读一本教科书时遇到一个问题,即缓冲区仅在文本文件已满时才写入文本文件,而在文本文件为空时才从文本文件读取 因此,假设我只想编写一个字符串“ James”,那么肯定不会使缓冲区变满,那么为什么仍将其写入文件testout.txt

package com.javatpoint;  

import java.io.*;

public class BufferedWriterExample {

    public static void main(String[] args) throws Exception {     
        FileWriter writer = new FileWriter("D:\\testout.txt");  
        BufferedWriter buffer = new BufferedWriter(writer);  
        buffer.write("Welcome to javaTpoint.");  enter code here
        buffer.close();  
        System.out.println("Sucenter code herecess");  
    }
}

1 个答案:

答案 0 :(得分:3)

  

我读了一本教科书,[BufferedWriter中的缓冲区仅在文本文件已满时才写入文本文件...

那是不正确的 1 。实际上,BufferedWriter会写到它包装的Writer

  • 当调用其中一个write方法填充缓冲区 2 OR
  • 致电bw.flush() OR
  • 致电bw.close()时。

这些通常会将数据写入文件。 (但并非总是如此。这取决于包装的Writer的行为。)

因此在示例中写入所有数据的原因是您正在调用buffer.close()


  

...和[a BufferedReader]仅在文本文件为空时读取。

这是正确的,但与其余问题无关。


1-您可能误读了课本。

2-实际上,这要复杂一点,因为写入大量字符的write(char[], ...)调用将首先刷新缓冲区,然后直接从char[]进行写入到包裹的流。它绕过缓冲区以避免不必要的复制。