Java IO流 复制文件速度对比 手把手教学

    科技2026-09-29  11

    Java I/O流 复制文件速度对比

    首先来说明如何使用Java的IO流实现文件的复制:

    第一步肯定是要获取文件

    这里使用字节流,一会我们会对视频进行复制(视频为非文本文件,故使用之)

    FileInputStream fis = new FileInputStream("copyFileName.format");// 用于读取文件

    FileOutputStream fos = new FileOutputStream("generatedFileName.format"); // 用于生成文件,若文件不存在,则会新生成

    第二步得到文件后就要进行复制

    由第一步可知我们用的是字节流,所以我们使用byte[] 进行搬运数据

    byte[] buffer = new btye[5]; int len; // read(btye[] b)会对文件进行读取,将数据填入 b 中,并返回读取数量,如读取完毕返回 -1 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); // 将读取的数据写入文件中 }

    第三步也是最重要的一步,关闭文件

    fos.close(); fis.close();

    明白上述步骤后我们来看完整的代码

    public void copyFile() throws IOException{ // 这里可能会抛出异常 FileInputStream fis = new FileInputStream("copyFileName.format"); // 用于读取文件 FileOutputStream fos = new FileOutputStream("generatedFileName.format"); // 用于生成文件 byte[] buffer = new byte[5]; int len; while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } fos.close(); fis.close(); }

    假设我们需要运一堆沙子到工地,使用摩托车和卡车的速度是不一样,即使摩托车开的比卡车快,但是一次的载货量太少,需要不停的往返,而卡车一次能搬运不少,只需几次就可以将沙子搬完。

    这里buffer就相当于运输工具,开始时定义的大小影响着拷贝文件的效率。

    我们来做一个测试,检验一下:

    运行一下

    可以看出数组容量的增大,对于复制速度的提升是巨大。

    既然如此为什么不尽可能的大呢?

    是因为数组开辟是需要占用内存的,并不是越大越好。

    所以我们常用1024来设定数组的大小,这样不至于复制效率太慢也不至于占用内存过多。

    其实,我们还可以使用BufferedInputStream和BufferedOutputStream对FileInputStream和FileOutputStream进行包装,能够大大提升复制的效率。

    实现方法与类似

    运行一下

    可以用BufferedInputStream和BufferedOutputStream对FileInputStream和FileOutputStream进行包装,即使buffer的容量为5也比第一测试时,用1024复制的要快。

    Processed: 0.010, SQL: 9