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

在java中连接两个大文件(超过1.5GB)最有效(最快)的方法是什么?,java,file,io,nio,Java,File,Io,Nio,我利用了这里的技术,在70秒内连接了两个1.5GB文件 我的代码涉及使用带有内存映射的文件通道和8KB缓冲区大小的ByteBuffers 我怎样才能提高这个速度 File file = new File(binDirectory + "/donjon.avi"); File oFile = new File(binDirectory + "/donjon2.avi"); FileInputStream is = new FileInputStream(file); FileOutputStr

我利用了这里的技术,在70秒内连接了两个1.5GB文件

我的代码涉及使用带有内存映射的文件通道和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();
试试这个

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

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

使用缓冲区大小,它可能会/可能不会更快。只有8kB的缓冲区?对于如此巨大的文件,请尝试1MB到10MB的大小。如果您知道Java应用程序将运行在哪些平台上,您可以尝试使用shell命令并利用特定于平台的优化。这个Java问题与部署在服务器(1个用户)上的Java应用程序或部署在桌面上的Java应用程序有关吗(许多使用者)?如果这是部署在服务器上的应用程序,调用外部命令连接两个文件不是会更快吗?使用命令cat(类似于*nix的操作系统)怎么样?cat file1 file2 file3>file4这只是一个满足Java编程限制好奇的问题。感谢您的评论,但是,我不希望使用外部命令。实际上,手动将文件的字节复制到另一个文件会更快。谢谢。我已经尝试过修改它以复制f的内容输出文件中的irst文件失败。我的代码有问题。