菜单

Java 文件复制(更改缓冲区大小)

目录

Java 文件复制(更改缓冲区大小)

在 Java 中 java.io.InputStreamjava.io.OutputStream
本节介绍一个使用输入/输出流执行复制操作的示例程序。
在基于流的复制中,增加读取缓冲区大小可以实现相对较快的复制速度,即使是复制大文件也是如此。
示例程序允许您将数据读取缓冲区大小指定为参数。

指定的读取缓冲区区域分配在 Java 虚拟机堆中,因此设置过大会降低效率。所以,在复制文件时,我们也会检查最佳数据读取缓冲区大小,以确保效率。

示例程序


执行

为了复制示例程序文件,我在 C 盘根目录下创建了一个名为“100M.txt”的 100MB 文件。在示例程序中, C:\100M.txt 数据以 1000KB 的缓冲区大小读取。 C:\a.txt 复制到[位置]。

样本在以下环境下运行。
操作系统:Windows XP
CPU:Athlon 1.46GHz
内存:1GB
JRE:1.6.4

◆示例

/** * 执行示例 * @param args */ public static void main(String[] args) { try { copyStream("C:\\100M.txt", "C:\\a.txt",1000); } catch (IOException e) { e.printStackTrace(); } }

◆执行结果


更改缓冲区大小

为了在复制文件时确定有效的数据读取缓冲区大小,应该将 copyStream 的第三个参数设置为
下面总结了以 1KB、100KB、1000KB 和 10000KB 为单位执行相同复制过程的结果。



虽然我们不能仅根据上述结果得出明确的结论,但如果数据读取缓冲区大小以 1000KB 为单位指定,
结果表明,该系统在复制操作期间的堆内存使用率和处理时间方面都很高效。
此外,即使文件大小增加(到大约 1GB),也获得了类似的结果。

相反,复制小文件(大约 1MB 或更小)时,增加缓冲区大小是没有意义的,所以最好指定大约 100KB。

使用文件通道可获得更快的速度


 java.io.InputStreamjava.io.OutputStream
复制对于理解输入/输出流至关重要,但是
J2SE1.4 中引入了新的 I/O java.nio.channels.FileChannel#transferTo
使用这种方法,您可以更高效地复制文件。
接下来,我将向您展示如何使用 FileChannel 轻松快速地复制文件。
Java 文件复制(简单快捷)

  • URLをコピーしました!
目录