Java学习笔记 (二十四) 缓冲流

缓冲流 BufferedInputStream 和 BufferedOutputStream 以及 BufferedReader 和 BufferedWriter

普通IO流每个读或写请求都由底层操作系统直接处理。这会大大降低程序的效率,因为每个这样的请求通常都会触发磁盘访问、网络活动或其他一些相对耗时的操作。

缓冲I/O流可以减少这种开销。缓冲输入流从缓冲区的内存区域读取数据;只有当缓冲区为空时才会调用本地操作系统输入API。类似地,缓冲输出流将数据写入缓冲区,只有当缓冲区满时才调用操作系统输出API。

我们可以将未缓冲流转换为已缓冲流,其中未缓冲流对象被传递给已缓冲流类的构造函数。
如下代码:

public static void main(String[] args) throws Exception{

        try(BufferedInputStream bis=new BufferedInputStream(new FileInputStream("千字文.txt"));
            BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"))
         ){
            int i;
           while ((i=bis.read())!=-1){
               bos.write(i);
           }

        }

    }

上述代码将字节流转换成了 缓冲字节流,字符流也是一样的,如下:

public static void main(String[] args) throws Exception{

        try(BufferedReader br=new BufferedReader(new FileReader("千字文.txt"));
            BufferedWriter bw=new BufferedWriter(new FileWriter("bw.txt"))
         ){
            int i;
           while ((i=br.read())!=-1){
               bw.write(i);
           }

        }

    }
注意

缓冲输出流,会当缓冲区填满或者关闭流时 等才会将数据写到磁盘。如果需要手动刷新数据到磁盘,可以调用flush()方法.

参考资料

1.The Java™ Tutorials

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值