缓冲 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){
}
}
}