更新时间: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小节中讲解的字节流的缓冲区类似,都对数据进行了缓冲,从而有效地提高了数据的读写效率。