我已经在这里使用了这些技术,并在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();
答案 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
可能比从该通道读取并写入目标通道的简单循环更有效。许多操作系统可以直接从文件系统缓存向目标通道传输字节,而无需实际复制它们。