更新时间:2022-08-19 来源:黑马程序员 浏览量:
I/O提供两个带缓冲的字节流,分别是BufferedInputStream和BufferedOutputStream,它们的构造方法中分别接收InputStream和OutputStream类型的参数作为对象,在读写数据时提供缓冲功能。应用程序、缓冲流和底层字节流之间的关系如图7-22所示。

图7-22 应用程序、缓冲流和底层字节之间的关系
从图7-22中可以看出,应用程序是通过缓冲流来完成数据读写的,而缓冲流又是通过底层的字节流与设备进行关联的。
下面通过一个案例来学习BufferedInputStream和BufferedOutputStream这两个流的用法。首先在Java项目的根目录下创建一个名称为src.txt的文件,并在该文件中随意写入一些内容;然后创建一个类,在类中使用FileOutputStream创建文件des.txt,并使用字节流缓冲对象将文件src.txt中的内容复制到文件des.txt中,如文件7-15所示。
文件7-15 Example14.java
import java.io.*;
public class Example14 {
public static void main (String[] args) throws Exception {
// 创建一个带缓冲区的输入流
BufferedInputStream bis = new BufferedInputStream (new
FileInputStream ("src.txt")) ;
// 创建一个带缓冲区的输出流
BufferedOutputStream bos = new BufferedOutputStream (
new FileOutputStream ("des.txt")) ;
int len;
while ((len = bis.read()) != -1) {
bos.write (len) ;
}
bis.close () ;
bos.close () ;
}
}文件7-15中,第5~6行代码分别创建了BufferedInputStream和BufferedOutputStream两个缓冲流对象,这两个流内部都定义了一个大小为8192的字节数组;第11~12行代码中调用read()或者write()方法读写数据时,首先将读写的数据存入定义好的字节数组;然后将字节数组的数据一次性读写到文件中,这种方式与7.2.4小节中讲解的字节流的缓冲区类似,都对数据进行了缓冲,从而有效地提高了数据的读写效率。