因此,我读一本教科书时遇到一个问题,即缓冲区仅在文本文件已满时才写入文本文件,而在文本文件为空时才从文本文件读取 因此,假设我只想编写一个字符串“ 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");
}
}
答案 0 :(得分:3)
我读了一本教科书,[
BufferedWriter
中的缓冲区仅在文本文件已满时才写入文本文件...
那是不正确的 1 。实际上,BufferedWriter
会写到它包装的Writer
:
bw.flush()
时 OR bw.close()
时。这些通常会将数据写入文件。 (但并非总是如此。这取决于包装的Writer
的行为。)
因此在示例中写入所有数据的原因是您正在调用buffer.close()
。
...和[a
BufferedReader
]仅在文本文件为空时读取。
这是正确的,但与其余问题无关。
1-您可能误读了课本。
2-实际上,这要复杂一点,因为写入大量字符的write(char[], ...)
调用将首先刷新缓冲区,然后直接从char[]
进行写入到包裹的流。它绕过缓冲区以避免不必要的复制。