通过字节缓冲区提高读写效率

通过创建一个指定长度的字节数组作为缓冲区,以此来提高IO流的读写效率。该方式适用于读取较大文件时的缓冲区定义。注意:缓冲区的长度一定是2的整数幂。一般情况下1024长度较为合适。

public class TestFileByteBuffer {
    public static void main(String[] args){
        long time1 = System.currentTimeMillis();
        copyFile("d:/1.jpg","d:/2.jpg");
        long time2 = System.currentTimeMillis();
        System.out.println(time1 - time2);
    }

    /**
     * @param src 源文件
     * @param desc 目标文件
     */
    public static void copyFile(String src,String desc){
        //"后开的先关闭!"按照它们被创建顺序的逆序来关闭
        try(FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(desc)){
            //创建一个缓冲区,提高读写效率
            byte[] buffer = new byte[1024];
            
            int temp = 0;
            while((temp = fis.read(buffer)) != -1){
                //将缓存数组中的数据写入文件中,注意:写入的是读取的真实长度
                fos.write(buffer,0,temp);
            }
            //将数据从内存中写入到磁盘中
            fos.flush();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

在使用字节缓冲区时,我们需要注意:

        为了减少对硬盘的读写次数,提高效率,通常设置缓存数组。相应的,读取时使用的方法为:read(byte[] b); 写入时的方法为:write(byte[] b,int off,int length)

        程序中如果遇到多个流,每个流都要单独关闭,防止其中一个流出现异常后导致其他流无法关闭的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值