以下是该方案: 我们有一个带有数据集的NAS,需要将其复制到本地磁盘以加快处理速度。数据集为2到15GB,每个数据集位于NAS上自己的文件夹中。
要复制到本地磁盘,我打电话:
FileUtils.copyDirectory(nasDir, localDiskDir);
两个参数是File
个实例。
nasDir
是网络映射的SMB驱动器。使用Java复制数据集时,最大传输速度最高可达8MB / s。使用Windows资源管理器或Nautilus的相同副本(取决于服务器)最高可达34-35MB / s 持续。
有没有人知道为什么会这样,而且,如何通过Java更快地复制目录?即使我们比本机慢5-10%也是可以接受的,但目前的差异表明某处的性能显着下降。
编辑:最初认为它可能与Apache Commons I / O库有关,但使用https://docs.oracle.com/javase/tutorial/essential/io/examples/Copy.java进行测试表明它在某种程度上是一个更基本的问题。