缓冲流与转换流
缓冲流和转换流是处理流,包装节点流增强功能。
缓冲流
作用
- 内置缓冲区(默认 8KB)
- 减少直接 IO 调用次数
- 大幅提升读写性能
BufferedInputStream/BufferedOutputStream
Java
// 缓冲字节流读取
try (BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("input.bin"))) {
byte[] buffer = new byte[1024];
int len = bis.read(buffer); // 从缓冲区读取
}
// 缓冲字节流写入
try (BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("output.bin"))) {
bos.write(data); // 写入缓冲区
bos.flush(); // 手动刷新(必要时)
} // close() 自动 flush
BufferedReader/BufferedWriter
Java
// 缓冲字符流读取
try (BufferedReader br = new BufferedReader(
new FileReader("input.txt"))) {
String line;
while ((line = br.readLine()) != null) { // 按行读取
// 处理每行
}
}
// 缓冲字符流写入
try (BufferedWriter bw = new BufferedWriter(
new FileWriter("output.txt"))) {
bw.write("内容");
bw.newLine(); // 写入换行符
bw.flush(); // 手动刷新
}
BufferedReader 特有方法:readLine() 按行读取文本,返回 null 表示读完。
转换流
作用
- 字节流 → 字符流
- 指定字符编码
InputStreamReader
Java
// 字节流转字符流,指定编码
try (InputStreamReader isr = new InputStreamReader(
new FileInputStream("input.txt"), "UTF-8")) {
char[] buffer = new char[1024];
int len = isr.read(buffer);
}
// 常用组合:BufferedReader + InputStreamReader
try (BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("input.txt"), "UTF-8"))) {
String line = br.readLine();
}
OutputStreamWriter
Java
// 字符流转字节流,指定编码
try (OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("output.txt"), "UTF-8")) {
osw.write("中文内容");
}
// 常用组合:BufferedWriter + OutputStreamWriter
try (BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("output.txt"), "UTF-8"))) {
bw.write("内容");
}
缓冲区大小选择
Java
// 默认缓冲区 8KB
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file"));
// 自定义缓冲区大小
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("file"), 16384); // 16KB
| 文件大小 | 建议缓冲区 |
|---|---|
| 小文件(<1MB) | 8KB(默认) |
| 中等文件 | 16KB~32KB |
| 大文件 | 64KB~128KB |
注意:缓冲区过大浪费内存,过小性能提升不明显。一般 8KB~32KB 即可。
要点总结
- 缓冲流内置缓冲区,减少 IO 调用,提升性能
- BufferedReader.readLine() 按行读取文本
- BufferedWriter.newLine() 写入换行符
- 转换流实现字节流和字符流转换,可指定编码
- InputStreamReader:字节流 → 字符流
- OutputStreamWriter:字符流 → 字节流
- 常用组合:BufferedReader + InputStreamReader(带编码读取)
📝 发现内容有误?点击此处直接编辑