编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java字节缓冲流

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

应用程序、缓冲流和底层字节流之间的关系

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

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class IOTest {
    public static void main(String[] args) {
        try {
            // 创建一个带缓冲区的输入流
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:/example.txt"));
            // 创建一个带缓冲区的输出流
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/example.txt"));
            int len;
            while ((len = bis.read()) != -1) {
                bos.write(len);
            }
            bis.close();
            bos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

未经允许不得转载: 技术文章 » Java编程 » Java字节缓冲流