FileOutputStream 缺点
FileOutputStream 频繁调用 write() 方法,写少量数据,会立即将数据写到硬盘,这样会导致效率低下
解决
使用 BufferedOutputStream 类
相当于下图中的迅雷下载:
BufferedOutputStream 就相当于 迅雷中的缓存,调用 write() 方法时,先将数据写入到 缓存中,调用 flush() 、close() 方法后,才会将数据写到硬盘
例子
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();
}
}
}
}
}
注意关闭流的顺序: 后打开的先关闭,或者 包装流先关闭


