BufferedWriter的核心作用是提升文本写入效率,减少频繁的底层I/O调用;它通过8192字符缓冲区暂存数据,满载、flush()或close()时批量写出,须显式flush()或close()确保落盘,推荐用try-with-resources自动管理。

BufferedWriter 的核心作用是**提升文本写入效率,减少频繁的底层 I/O 调用**。它不直接操作文件或网络,而是作为“中间缓存层”,把零散的小量写入先暂存在内存中,等积攒到一定量或显式要求时,再一次性批量写到底层流(如 FileWriter、OutputStreamWriter)中。
为什么需要 BufferedWriter
没有缓冲时,每次调用 write() 都可能触发一次系统级写操作——比如打开磁盘通道、寻址、落盘。写 1000 次单字符,就可能产生 1000 次磁盘 I/O,性能极差,还加速硬件损耗。BufferedWriter 通过内置默认 8192 字符的缓冲区(可自定义),把多次小写入合并成少数几次大写入,显著降低开销。
关键工作机制
它的行为依赖两个核心动作:
- 写入缓冲区:调用 write(String)、write(char[]) 或 newLine() 时,数据先存入内存缓冲数组 cb[],不立即落盘
-
真正写出:在以下任一情况发生时,才将缓冲区内容交给底层 Writer:
- 缓冲区已满(达到 8192 字符)
- 显式调用 flush()
- 调用 close()(自动触发 flush + 关闭)
必须注意的使用要点
忘记 flush() 或 close() 是最常见的错误——数据会一直卡在内存缓冲区,文件里看不到任何内容。
立即学习“Java免费学习笔记(深入)”;
- 仅靠 write() 不保证写入文件,必须配对 flush() 或 close()
- 推荐优先使用 try-with-resources,自动确保 close(也就自动 flush)
- 若需实时看到写入效果(如日志调试),可在关键位置手动 flush()
- 关闭时只需关 BufferedWriter,它会自动关闭包装的底层流(如 FileWriter),无需重复 close
典型创建与写入流程
标准写法示例(含异常处理):
FileWriter fw = new FileWriter("out.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("第一行");
bw.newLine();
bw.write("第二行");
bw.flush(); // 确保写出
bw.close(); // 自动 flush 并关闭 fw










