Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)

    缓冲 Buffer 它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有一定大小的。


    数据传输速度和数据处理的速度存在不平衡,例如每秒要写50次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两个事件,用buffer暂存起来,变成每5秒写一次硬盘,数据可以直接送往缓冲区,高速设备不用再等待低速设备,对系统的冲击就很小,写入效率高了。


    以下介绍 BufferedInputStream、BufferedOutputStream 这两个高级流在读取、写入的用法,以复制文件为例。



Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)_第1张图片



FileInputStream fis = new FileInputStream(file directory)


// 把 fis 封装到 BufferedInputStream 这个对象里
BufferedInputStream bis = new BufferedInputStream(fis);



FileOutputStream fos = new FileOutputStream(file directory);


// 把 fos 封装到 BufferedOutputStream 这个对象里
BufferedOutputStream bos = new BufferedOutputStream(fos);


    其中 bos.flush() 其实可以忽略这个刷新缓冲流。只调用 bis.close() 和 bos.close() 就可以。



    通过 BufferedInputStream 的底层代码可见,Inputstream 已经关闭



Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)_第2张图片



    再通过 BufferedOutputStream 的底层代码,虽然没有close() 的 方法,但根据 JDK7新特性try(在这里声明的会自动关闭),所以 OutputStream 也是被自动关闭,然后调用 flush()方法去执行。



Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)_第3张图片



    核心代码如下:



public class Buffer_IO_Stream {

    public static void main(String[] args){
        try {
            FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test\\1230.txt");
            BufferedInputStream bis  = new BufferedInputStream(fis);

            FileOutputStream fos  = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test\\copy.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);

            int size;
            byte[] buf  = new byte[1024];
            while ((size=bis.read(buf))!=-1){
                bos.write(buf,0,size);
            }

            // bos.flush();
            bis.close();
            bos.close();
        }
        catch(Exception e){
        }
    }
}


你可能感兴趣的:(java,开发语言)