JAVA BufferedOutputStream 类 作者:马育民 • 2022-02-15 14:15 • 阅读:10078 # FileOutputStream 缺点 `FileOutputStream` 频繁调用 `write()` 方法,写少量数据,会立即将数据写到硬盘,这样会导致效率低下 [![](/upload/0/0/1IX3aqcYhwpk.png)](/upload/0/0/1IX3aqcYhwpk.png) ### 解决 使用 `BufferedOutputStream` 类 相当于下图中的迅雷下载: [![](https://www.malaoshi.top/upload/pic/java/Snipaste_2022-02-15_14-01-14.png)](https://www.malaoshi.top/upload/pic/java/Snipaste_2022-02-15_14-01-14.png) `BufferedOutputStream` 就相当于 迅雷中的缓存,调用 `write()` 方法时,先将数据写入到 **缓存中**,调用 `flush()` 、`close()` 方法后,才会将数据写到硬盘 [![](/upload/0/0/1IX3b0FnZlr5.png)](/upload/0/0/1IX3b0FnZlr5.png) # 例子 ``` package stdfile; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class StdBuff { public static void main(String[] args) { FileOutputStream fos=null; BufferedOutputStream bos=null; try { fos=new FileOutputStream("D:\\1测试.txt"); bos=new BufferedOutputStream(fos); byte[] array="你好".getBytes(); bos.write(array);// 缓冲流,调用 write() 方法不会立即往硬盘上写,而是向缓存中写 bos.flush();//立即将缓存中的数据写入到磁盘 bos.write(99); System.out.println(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //关闭流的顺序不能改变,否则报错 //后打开的先关闭,或者 包装流先关闭 if(bos!=null){ try { bos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //先打开的要后关闭,或者 if(fos!=null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } ``` **注意关闭流的顺序:** 后打开的先关闭,或者 包装流先关闭 原文出处:http://malaoshi.top/show_1IX2maEtQYWr.html