在java中连接两个大(超过1.5GB)文件的最有效(最快)方法是什么?

时间:2014-01-03 05:55:26

标签: java file io nio

我已经在这里使用了这些技术,并在70秒内连接了两个1.5GB文件。

http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly

我的代码涉及使用带有内存映射的FileChannel和带有8KB缓冲区大小的ByteBuffers。

我怎样才能提高这个速度?

File file = new File(binDirectory + "/donjon.avi");
File oFile = new File(binDirectory + "/donjon2.avi");

FileInputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(oFile);
FileChannel f1 = is.getChannel();
FileChannel f2 = fos.getChannel();

f2.transferFrom(f1, 0, f1.size());
f2.transferFrom(f1, f1.size(), f1.size());

f2.close();
f1.close();

1 个答案:

答案 0 :(得分:7)

试试这个

    FileChannel c1 = new FileInputStream("1").getChannel();
    FileChannel c2 = new FileOutputStream("2", true).getChannel();
    c2.transferFrom(c1, c2.size(), c1.size());

javadoc说FileChannel.transferFrom可能比从该通道读取并写入目标通道的简单循环更有效。许多操作系统可以直接从文件系统缓存向目标通道传输字节,而无需实际复制它们。