gpt4 book ai didi

java - 如何在 Windows XP 中复制大文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:32 27 4
gpt4 key购买 nike

我在 Windows XP 中有一个大文件 - 38GB。 (虚拟机镜像)

我好像无法复制它。

在桌面上拖动 - 出现“系统资源不足,无法完成请求的服务”错误

使用 Java - FileChannel.transferTo(0, fileSize, dest) 对所有 > 2GB 的文件都失败

使用 Java - 100Mb block 中的 FileChannel.transferTo() 在 ~18Gb 后失败

java.io.IOException: Insufficient system resources exist to complete the requested service
at sun.nio.ch.FileDispatcher.write0(Native Method)
at sun.nio.ch.FileDispatcher.write(FileDispatcher.java:44)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:72)
at sun.nio.ch.IOUtil.write(IOUtil.java:28)
at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:198)
at sun.nio.ch.FileChannelImpl.transferToTrustedChannel(FileChannelImpl.java:439)
at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:510)

我的意思是 - 计算机有 3GB 的 RAM。 100GB 的缓冲区应该足够了!?!?

显然 DOS 命令“copy”和“xcopy”也失败了。

(编辑)我试过 COPY 和 XCOPY - 这些都失败并出现相同的错误。 XCOPY 似乎也需要很长时间。

我听说过 Robocopy,但它不会复制单个文件?

我真的觉得 Windows 现在已经失败了。微软肯定听说过大于几 GB 的文件吧?

谢谢!

最佳答案

在 Java 中,不要试图在一次操作中复制整个文件。 transferTo() 方法适用于文件 block ;并非旨在作为高级文件复制方法。调用 transferTo()在一个循环中,并假设 count 字节的数据将在 RAM 中(即,降低该参数以适应 RAM)。

FileChannel src = ... 
FileChannel dst = ...
final long CHUNK = 16 * 1024 * 1024; /* 16 Mb */
for (long pos = 0; pos < fileSize; ) {
pos += src.transferTo(pos, CHUNK, dst);
}

transferTo() JavaDoc 中关于它“比简单循环更有效”的评论是指 channel 到 channel 的通信比 channel 到用户的通信更能优化-空间到 channel 。这并不意味着可以避免所有循环。

关于java - 如何在 Windows XP 中复制大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com