java file复制文件效率

复制文件的大小为2.5G,对比一下使用FileOutputStream和BufferedOutputStream的效率windows

我理解,使用文件流对文件进行读写和复制,和在windows上使用鼠标点击文件复制本质上应该是同样的code

使用正常的FileOutputStream复制文件:ip

private static void transfer() {
    long t1 = System.currentTimeMillis();
    File file = new File("d:\\CPMS.zip");
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream(file);
        fos = new FileOutputStream(new File("D:\\downloads\\" + file.getName()));
        int length = 0;
        byte[] b = new byte[1024];
        while ((length = fis.read(b)) != -1) {
            fos.write(b, 0, length);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    long t2 = System.currentTimeMillis();
    System.out.println("复制文件用时:" + (t2 - t1) + " ms");
}

控制台输出get

复制文件用时:22115 ms

使用BufferedOutputStream复制文件:it

private static void copyFile() {
    long t1 = System.currentTimeMillis();
    File file = new File("D:\\CPMS.zip");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
        fos = new FileOutputStream(new File("D:\\downloads\\" + file.getName()));
        bos = new BufferedOutputStream(fos);
        int length = 0;
        byte[] b = new byte[1024];
        while ((length = fis.read(b)) != -1) {
            bos.write(b, 0, length);
        }
        bos.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bis != null) {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bos != null) {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    long t2 = System.currentTimeMillis();
    System.out.println("复制文件用时:" + (t2 - t1) + " ms");
}

控制台输出io

复制文件用时:11974 ms

看上去时间差异挺大的,因此建议仍是使用缓冲流来读写文件,提升效率效率

相关文章
相关标签/搜索