缓冲 Buffer 它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有一定大小的。
数据传输速度和数据处理的速度存在不平衡,例如每秒要写50次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两个事件,用buffer暂存起来,变成每5秒写一次硬盘,数据可以直接送往缓冲区,高速设备不用再等待低速设备,对系统的冲击就很小,写入效率高了。
以下介绍 BufferedInputStream、BufferedOutputStream 这两个高级流在读取、写入的用法,以复制文件为例。
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 已经关闭
再通过 BufferedOutputStream 的底层代码,虽然没有close() 的 方法,但根据 JDK7新特性try(在这里声明的会自动关闭),所以 OutputStream 也是被自动关闭,然后调用 flush()方法去执行。
核心代码如下:
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){}}
}
上一篇: 拔河比赛的初二英语日记带翻译优秀
下一篇:低温烹饪过程中真空压力的自动控制