使用Java NIO读取和写入大型文件(>;1Gb)是否合适?
我正在尝试将一个大型文件(通常每个事务中超过1GB的文件)读写到另一个存储位置。在性能和低内存(防止任何OOM情况)方面,通过将文件写入另一个存储位置来传输文件最有效的方法是什么使用Java NIO读取和写入大型文件(>;1Gb)是否合适?,java,performance,nio,large-files,memory-efficient,Java,Performance,Nio,Large Files,Memory Efficient,我正在尝试将一个大型文件(通常每个事务中超过1GB的文件)读写到另一个存储位置。在性能和低内存(防止任何OOM情况)方面,通过将文件写入另一个存储位置来传输文件最有效的方法是什么 与传统的Java IO相比,我看到Java NIO是一种更有效的方法,但它真的适合我的用例吗?它会是一种过度的杀伤力吗?我尝试过复制这种大小(1GB)的大型文件。所花费的时间更多地取决于底层硬件和网络状态,而不是JavaNIO本身。作为我刚才尝试的一个简单示例,复制一个989M的文件需要以下平均时间 注意:当文件已经存
与传统的Java IO相比,我看到Java NIO是一种更有效的方法,但它真的适合我的用例吗?它会是一种过度的杀伤力吗?我尝试过复制这种大小(1GB)的大型文件。所花费的时间更多地取决于底层硬件和网络状态,而不是JavaNIO本身。作为我刚才尝试的一个简单示例,复制一个989M的文件需要以下平均时间 注意:当文件已经存在并且需要替换时,没有太大区别
当我们在网络驱动器上运行测试时,我确信由于网络变量,会有很大的变化。可能适合您的需要。java.nio.files.File有一个copy()方法-看看如果我对大于1 gb的大文件使用映射内存缓冲区,它会使用太多内存吗?对不起,但我不知道术语“映射内存缓冲区”是什么意思。你能解释一下吗?我不擅长从技术上解释。此链接解释了映射的内存缓冲区@WillsSet OK。我理解。我认为您在这里提到的用例(复制文件)不需要使用
FileChannel.map()
(这是内存映射的实现)。内存映射,虽然我只是很少使用它,但对于频繁、多次读取或写入大型文件的情况似乎很好。例如,搜索引擎ApacheLucene所做的。它多次操作和读取索引文件(或目录)的各个部分。我不确定一次性复印是否需要它。不过,让我们看看是否还有其他评论。