在 Java 中复制文件的最快方法
在Java中复制大量文件的最快方法是什么?到目前为止,我已经使用了文件流和nio。整体流似乎比nio快。到目前为止,您取得了哪些经历?
在Java中复制大量文件的最快方法是什么?到目前为止,我已经使用了文件流和nio。整体流似乎比nio快。到目前为止,您取得了哪些经历?
http://www.baptiste-wicht.com/2010/08/file-copy-in-java-benchmark/ 可能会得到你的答案。
对于基准测试,我使用不同的文件进行了测试。
- 小文件 (5 KB)
- 中等文件 (50 KB)
- 大文件 (5 MB)
- 胖文件 (50 MB)
- 和一个巨大的文件(1.3 GB)只有二进制文件
我首先使用文本文件进行测试,然后使用二进制文件进行测试。我使用三种模式进行了测试:
- 在同一硬盘上。它是一个250 GB的IDE硬盘,具有8 MB的缓存。它采用 Ext4 格式。
- 在两个磁盘之间。我使用了第一个磁盘和另一个250 GB的SATA硬盘,缓存为16 MB。它采用 Ext4 格式。
- 在两个磁盘之间。我使用了第一个磁盘和另一个1 TB的SATA硬盘,缓存为32 MB。它是使用 NTFS 格式化的。
我使用了一个基准框架,在这里描述,对所有方法进行测试。测试已经在我的个人计算机上进行(Ubuntu 10.04 64位,Intel Core 2 Duo 3.16 GHz,6 Go DDR2,SATA硬盘)。使用的Java版本是Java 7 64位虚拟机...
我会使用:
import java.io.*;
import java.nio.channels.*;
public class FileUtils{
public static void copyFile(File in, File out)
throws IOException
{
FileChannel inChannel = new
FileInputStream(in).getChannel();
FileChannel outChannel = new
FileOutputStream(out).getChannel();
try {
inChannel.transferTo(0, inChannel.size(),
outChannel);
}
catch (IOException e) {
throw e;
}
finally {
if (inChannel != null) inChannel.close();
if (outChannel != null) outChannel.close();
}
}
public static void main(String args[]) throws IOException{
FileUtils.copyFile(new File(args[0]),new File(args[1]));
}
}
如果Windows中的任何文件大于64M,则可能需要查看以下内容:http://forums.sun.com/thread.jspa?threadID=439695&messageID=2917510