我正在运行一个程序,该程序需要随机访问一个非常大的文件(大约 151 GB)。我发现每当它在 Orchard 实验室的一台 MacPro 机器上运行时(详情见 http://inst.eecs.berkeley.edu/cgi-bin/clients.cgi?choice=6a&string=),该程序会尝试读取文件的特定部分并因文件系统错误而崩溃:
java.io.IOException: Invalid argument
at java.io.RandomAccessFile.readBytes(Native Method)
at java.io.RandomAccessFile.read(RandomAccessFile.java:322)
我只是在使用 RandomAccessFile 类。
RandomAccessFile fd;
//...Initialized and already used fd with
//no problems for larger locations as well
//location == 155587178230
//numBytes == 15492560
//off == 0
//arr.length == 15492560
fd.seek(location);
fd.read(arr, off, numBytes);
无论我使用哪台 Orchard 实验室计算机,它每次都在相同的确切位置发生相同的确切字节范围。
我已经在运行 Debian Linux 的 DELL 计算机上测试了这段代码,没有遇到这个问题。
最佳答案
您应该使用 linux 命令“dd”来检查文件在给定位置是否真的可读。我假设该文件位于 MAC 实验室的网络驱动器上,如果您在 Dell Linux 工作站上访问该文件的副本,您将不会收到此错误,因为 DELL 的磁盘没有损坏。
关于mac 上大文件的 java.io.RandomAccessFile 无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4360855/