java基础-IO(5)缓冲流、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

缓冲流就是带有一个缓冲区的流。
原有的流是直接读入读出,读出的时候直接与存储系统交互(如磁盘等),涉及到I\O操作就比较慢。
可类别送快递:一开始是一件一件送,后来用车送到一个集中点,然后再送到用户手上,极大节省了中间的传输时间。
在这里插入图片描述
在这里插入图片描述


缓冲字节流:
BufferedInputStream

public class FilterInputStream extends InputStream {
	...
}

public  class BufferedInputStream extends FilterInputStream {
	//默认缓冲区大小
	private static int DEFAULT_BUFFER_SIZE = 8192;
	
	//使用字节数组作为缓冲区
	 protected volatile byte buf[];
	 
	//构造方法1  从构造方法可看出,缓冲流依赖其他流写入到缓冲区  
	 public BufferedInputStream(InputStream in) {
	 	 this(in, DEFAULT_BUFFER_SIZE);
	 }
	
	//构造方法2  支持自定义缓冲区大小
	public BufferedInputStream(InputStream in, int size) {
	 super(in);
	   if (size <= 0) {
	       throw new IllegalArgumentException("Buffer size <= 0");
	   }
	   buf = new byte[size];
	}

//继承自字节输入流的超类 InputStream,因此具有一切读的方法、关闭资源....等
}

BufferedOutputStream:

class FilterOutputStream extends OutputStream{
....
}

public class BufferedOutputStream extends FilterOutputStream {

//缓冲数组
protected byte buf[];

//构造方法1   
public BufferedOutputStream(OutputStream out) {
    this(out, 8192);  //默认大小
}

//构造方法2   自定义缓冲区大小
public BufferedOutputStream(OutputStream out, int size) {
        super(out);
        if (size <= 0) {
            throw new IllegalArgumentException("Buffer size <= 0");
        }
        buf = new byte[size];
    }
}

//超级父类OutputStream
....写出的方法

字符缓冲流与其功能类似,使用字符进行数据缓存。
BufferedReader、BufferedWriter


简单单例,使用缓冲流复制文件:


//复制源
private static final String FILE_NAME = "XXXX";

//输出位置
private static final String OUT_FILE_NAME = "XXXOOOO";



try {

    InputStream fIn = new FileInputStream(FILE_NAME);

    BufferedInputStream bufferedInputStream = new BufferedInputStream(fIn, 3 * 1024);
    //缓冲字节输出流
    FileOutputStream fileOutputStream = new FileOutputStream(OUT_FILE_NAME);
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
    long sTime = System.currentTimeMillis();
    byte[] rbs = new byte[1024 * 10];
    int count;
    while ((count = bufferedInputStream.read(rbs)) != -1) {
        bufferedOutputStream.write(rbs, 0, count);
    }
    long endTine = System.currentTimeMillis();

    System.out.println("用时: " + (endTine - sTime));
    bufferedOutputStream.flush();

    bufferedInputStream.close();

    bufferedOutputStream.close();


	} catch (Exception e) {
    e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值