Java BufferedOutputStream:高效字节写入详解
Java BufferedOutputStream:高效字节写入详解
BufferedOutputStream 位于 java.io,包装另一 OutputStream 加速字节输出。通过内存缓冲减少对底层设备的写操作,显著提升性能,尤其适合大文件。
继承抽象 OutputStream 并提供具体实现。
BufferedOutputStream 工作原理
内部默认分配 8 KiB(8,192 字节)缓冲区。调用 write() 时字节先存入缓冲区。仅当缓冲区满或调用 flush()/close() 时才刷入底层流。因磁盘 I/O 开销大,此缓冲策略减少往返,大幅加快字节写入。
创建 BufferedOutputStream
导入类并包装任意 OutputStream,通常为 FileOutputStream:
FileOutputStream file = new FileOutputStream("output.txt");
BufferedOutputStream buffer = new BufferedOutputStream(file);
控制缓冲区大小:
BufferedOutputStream buffer = new BufferedOutputStream(file, 16384); // 16 KiB 缓冲区
大缓冲区利于超大写入,默认 8 KiB 适合大多数场景。
BufferedOutputStream 关键方法
write()
write(int b)– 向缓冲区添加单字节write(byte[] b)– 写整个字节数组write(byte[] b, int off, int len)– 从偏移off写len字节
示例:写文本到文件
import java.io.*;
public class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the file";
try (FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
bos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
程序创建 output.txt,内容:
This is a line of text inside the file
注意: String.getBytes() 按平台默认字符集转字节数组。为确定性结果,指定字符集如 data.getBytes(StandardCharsets.UTF_8)。
flush()
强制将缓冲数据立即写入底层流。需确保关闭流前数据持久化或写网络套接字时很有用。
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(data.getBytes());
bos.flush(); // 保证数据发送
close()
关闭流,刷新剩余数据并释放资源。调用后不可复用。
完整参考见官方文档:BufferedOutputStream API。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- Java Stack 类全面指南:用法、核心方法与实战示例
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除