c)BufferedInputStream:高效字节输入流

BufferedInputStream作为InputStream的子类,通过内部字节数组来提高读取效率。构造时会预读部分数据,read()和read(byte[])方法操作这个缓冲区,减少系统调用。在文件复制示例中,尽管批量读写与单字节读写效率差距不大,但由于内置缓冲,两者效率都较高,因此在开发中单字节读写也是可接受的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

API介绍:
在这里插入图片描述
解析:BufferedInputStream类是InputStream子类,内部管理一个字节数组,每次创建对象时,会调用底层读取若干个字节数组,调用read(),read(byte)方法对该管理数据进行读取,从而减少底层系统调用,提高读取效率。
构造方法:
在这里插入图片描述

public class Demo11 {
    public static void main(String[] args) throws FileNotFoundException {

        InputStream is  = new FileInputStream("文件地址");
        //设置默认缓冲区大小8192
        BufferedInputStream in = new BufferedInputStream(is);
        System.out.println(in);//输出对象地址

        BufferedInputStream in2 = new BufferedInputStream(is,1024);
        System.out.println(in2);//输出新的对象地址。
    }
}

常用功能方法(与InputStream类功能一致):

public class Demo13 {
    public static void main(String[] args) throws IOException {
        InputStream is = new FileInputStream("文件地址");
        
        BufferedInputStream in = new BufferedInputStream(is);
        int i= -1;
        
        while((i=in.read())!=-1){
            System.out.println((char)i);
        }
        
        byte [] bs = new byte[in.available()];
        in.read(bs);
        System.out.println(new String(bs));
        in.close();
    }
}

高效字节流文件复制操作:
在这里插入图片描述
复制文件:

public class Demo14 {
    public static void main(String[] args) throws IOException {

        BufferedInputStream out = new BufferedInputStream(new FileInputStream("文件地址"));
        BufferedOutputStream in = new BufferedOutputStream(new FileOutputStream("文件地址"));
        int i =-1;//一个一个读写
         while((out.read())!=-1){
            in.write(i);
        }
         //一堆一堆读写:
        byte [] b=new byte[1024];
         int len=-1;
         while ((len=out.read(b))!=-1){
             in.write(b,0,len);
         }
         
         out.close();
         in.flush();
         in.close();
        System.out.println("复制成功!");
        
    }
}

结论:使用高效率字节流进行读写操作,一个一个字节读写,与一堆一堆字节读写效率区别不大,原因是该对象中都有缓冲区。一堆一个字节写能节省的时间只是内存循环时间。开发中一个一个字节读写都可以是用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值