我在 iSeries 机器 (JDK 1.5) 上运行一些 Java NIO 代码时遇到问题。基本上,代码是将文件分成文件的块部分到另一个较小的文件。相同的代码已经在其他 iSeries 机器上运行了一段时间,没有出现任何问题。这是代码片段:
//copy original data file content to temp file
long startPos = dataFile.length() - remaining;
long transferSize = maxSizeBytes - size;
size += inChannel.transferTo(startPos, transferSize, outChannel); //exception here
remaining -= size;
这是堆栈跟踪:
Caused by: java.io.IOException: Operation not supported. Map failed
at java.lang.Throwable.<init>(Throwable.java:196)
at java.lang.Exception.<init>(Exception.java:41)
at java.io.IOException.<init>(IOException.java:40)
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:742)
at sun.nio.ch.FileChannelImpl.transferToTrustedChannel(FileChannelImpl.java:448)
at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:521)
... 11 更多
我做了一些调查,到目前为止的原因(父目录的文件权限、内存不足、共享内存控制 QSHRMEMCTL 关闭、使用 SAN)都被证明是不成功的。
有人对这个特殊问题有任何经验吗?
谢谢,布拉德。