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

Jakarta Commons IO からのものだと思いFileUtilsますが、その場合はまったく異なる実装であるため、それらの間に相関関係はありません。

FileChannel.transferFrom()指定されたファイルの一部をメモリ マップしようとしますが、エラー メッセージに基づいて、ファイル全体をメモリ マップできないことが問題のようです。Linux ボックスは 32 ビットで実行され、Windows ボックスは 64 ビットで実行されていると思います。

2 番目のオプション: のマンページを見るとmmap、この例外は、「指定されたファイルの基になるファイル システムがメモリ マッピングをサポートしていない」場合にスローされます。Linux にファイルシステムをどのようにマウントしていますか? Samba ファイルシステムをマウントしている場合、マップできない理由がわかりました。

于 2013-01-15T19:06:23.033 に答える
0

まったく同じ問題を見たことがあります。共有がオプションなしで Linux にマウントされているかどうかを確認しdirectioます。私の場合、directioすぐに再マウントせずにこのエラーを解決しました。このオプションはキャッシングを無効にしますが、mmap() システム関数も無効にします。

mount共有を行う場合は指定しないでください-o directio。ファイルが共有に/etc/fstab指定されていないかどうかも確認してください。directio

于 2013-12-20T13:38:00.520 に答える