fileoutputstream是java中用于写入字节数据的底层流类,支持单字节写入(write(int b))、批量写入(write(byte[] b)等)和追加模式(第二个参数为true),配合bufferedoutputstream可提升小量多次写入性能。

FileOutputStream 是 Java 中用于将字节数据写入文件的底层输出流类,适合处理二进制内容(如图片、音频、序列化对象)或需要精确控制字节的操作。
直接写入单个字节
调用 write(int b) 方法可写入一个字节(参数只取低 8 位,高 24 位被忽略):
try (FileOutputStream fos = new FileOutputStream("data.bin")) {
fos.write(65); // 写入字节 0x41(即字符 'A')
fos.write(0xFF); // 写入字节 0xFF(255)
} catch (IOException e) {
e.printStackTrace();
}
注意:该方法每次只写 1 字节,频繁调用效率低,仅适用于简单场景或调试。
批量写入字节数组
更常用的是 write(byte[] b) 或带偏移与长度的重载 write(byte[] b, int off, int len):
byte[] data = {1, 2, 3, 4, 5};
try (FileOutputStream fos = new FileOutputStream("output.dat")) {
fos.write(data); // 写入全部 5 字节
// 或指定范围:fos.write(data, 1, 3); // 从索引 1 开始写 3 字节 → [2, 3, 4]
}
这是高效写入的主要方式,推荐用于大多数实际场景。
追加模式写入
构造时传入第二个参数 true,即可在文件末尾追加而非覆盖:
try (FileOutputStream fos = new FileOutputStream("log.txt", true)) {
fos.write("new line\n".getBytes(StandardCharsets.UTF_8));
}
注意:getBytes() 默认使用平台编码,建议显式指定 StandardCharsets.UTF_8 避免乱码。
配合 BufferedOutputStream 提升性能
对小量多次写入(如循环中逐字节/逐短数组写),直接使用 FileOutputStream 会产生大量系统调用。可包装为带缓冲的流:
try (FileOutputStream fos = new FileOutputStream("big.bin");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
for (int i = 0; i
缓冲区默认大小为 8192 字节,显著减少磁盘 I/O 次数。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











