0

我正进入(状态

java.io.IOException: No such device
    at sun.nio.ch.FileChannelImpl.map0(Native Method)

在 linux 上使用它时(但在 windows 上可以正常工作):

    destination.transferFrom(source, 0, source.size());

但如果我这样做,它会起作用:

FileUtils.copyFile(processedFile,outputFile);

源是另一台 (Windows) 机器上的共享文件夹。当它在 Windows 机器上运行时也是如此。

4

2 回答 2

0

我假设它FileUtils来自 Jakarta Commons IO,在这种情况下,它是一个完全不同的实现,所以它们之间没有相关性。

FileChannel.transferFrom()尝试对指定文件的部分进行内存映射,并且根据错误消息,问题似乎是整个文件无法进行内存映射。我猜你的 Linux 机器运行 32 位,而 Windows 机器运行 64 位。

第二种选择:查看手册页mmap,当“指定文件的底层文件系统不支持内存映射”时抛出此异常。你是如何在 Linux 上挂载文件系统的?如果您要挂载 Samba 文件系统,我可以理解为什么它无法被映射。

于 2013-01-15T19:06:23.033 回答
0

我刚刚看到完全相同的问题。检查您的共享是否在没有directio选项的情况下安装在 Linux 上。就我而言,重新安装而不directio立即解决此错误。此选项禁用缓存,但也禁用 mmap() 系统功能。

执行mount共享时,不要指定-o directio. 还要检查/etc/fstab文件是否未指定directio您的共享。

于 2013-12-20T13:38:00.520 回答