学科分类
目录
Java基础

字节流缓冲流

在IO包中提供了两个带缓冲的字节流,分别是BufferedInputStream和BufferedOutputStream,它们的构造方法中分别接收InputStream和OutputStream类型的参数作为对象,在读写数据时提供缓冲功能。应用程序、缓冲流和底层字节流之间的关系如图1所示。

图1 缓冲流

从图1可以看出,应用程序是通过缓冲流来完成数据读写的,而缓冲流又是通过底层的字节流与设备进行关联的。接下来通过一个案例来学习BufferedInputStream和BufferedOutputStream 这两个缓冲流的用法。

同样以上一小节中的拷贝图片文件为例,使用字节缓冲流的实现代码如文件1所示。

文件1 Example06.java

 1    import java.io.*;
 2    public class Example06 {
 3        public static void main(String[] args) throws Exception {
 4            // 创建用于输入和输出的字节缓冲流对象
 5            BufferedInputStream bis = new BufferedInputStream(
 6                                    new FileInputStream("source/src.jpg"));
 7            BufferedOutputStream bos = new BufferedOutputStream(
 8                                    new FileOutputStream("target/dest.jpg"));
 9            // 定义一个int类型的变量len
 10            int len = 0;
 11            // 获取拷贝文件前的系统时间
 12            long beginTime = System.currentTimeMillis();
 13            // 通过循环读取输入字节缓冲流中的数据,并通过输出字节缓冲流写入到新文件
 14            while ((bis.read()) != -1) {
 15                bos.write(len);
 16            }
 17            // 获取拷贝之后的系统时间
 18            long endTime = System.currentTimeMillis();
 19            // 输出拷贝花费时间
 20            System.out.println("花费时间为:"+(endTime-beginTime) +"毫秒");
 21            // 关闭流
 22            bis.close();
 23            bos.close();
 24        }
 25    }

运行结果如图2所示。

图2 运行结果

文件1中,创建了BufferedInputStream和BufferedOutputStream两个缓冲流对象,这两个流内部都定义了一个大小为8192的字节数组,当调用read()或者write()方法读写数据时,首先将读写的数据存入到定义好的字节数组,然后将字节数组的数据一次性读写到文件中,这种方式与前面小节中讲解的字节流的缓冲区类似,都对数据进行了缓冲,从而有效的提高了数据的读写效率。

点击此处
隐藏目录