缓冲流 BufferedInputStream 和 BufferedOutputStream 以及 BufferedReader 和 BufferedWriter
普通IO流每个读或写请求都由底层操作系统直接处理。这会大大降低程序的效率,因为每个这样的请求通常都会触发磁盘访问、网络活动或其他一些相对耗时的操作。
缓冲I/O流可以减少这种开销。缓冲输入流从缓冲区的内存区域读取数据;只有当缓冲区为空时才会调用本地操作系统输入API。类似地,缓冲输出流将数据写入缓冲区,只有当缓冲区满时才调用操作系统输出API。
我们可以将未缓冲流转换为已缓冲流,其中未缓冲流对象被传递给已缓冲流类的构造函数。
如下代码:
public static void main(String[] args) throws Exception{
try(BufferedInputStream bis=new BufferedInputStream(new FileInputStream("千字文.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"))
){
int i;
while ((i=bis.read())!=-1){
bos.write(i);
}
}
}
上述代码将字节流转换成了 缓冲字节流,字符流也是一样的,如下:
public static void main(String[] args) throws Exception{
try(BufferedReader br=new BufferedReader(new FileReader("千字文.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("bw.txt"))
){
int i;
while ((i=br.read())!=-1){
bw.write(i);
}
}
}
注意
缓冲输出流,会当缓冲区填满或者关闭流时 等才会将数据写到磁盘。如果需要手动刷新数据到磁盘,可以调用flush()方法.