mac 上大文件的 java.io.RandomAccessFile 无效参数

标签 java macos file-io large-files random-access

我正在运行一个程序,该程序需要随机访问一个非常大的文件(大约 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/

相关文章:

swift - 分配给 NSMenuItem 的操作似乎不起作用

iphone - 如何在 iPhone 的照片库中获取照片的名称?

ios - 在类中定义的闭包中到达 "self"

java - 从 UTF-16 编码的文本文件中读取,þÿ 放在前面

java - 当父类(super class)使用@Inject时,如何构造一个类?

java - 如何通过 JVMTI 接口(interface)使用 jmethod id 获取声明该方法的类

java - 从 Spring Boot jar 文件运行一个非主类

java - 我可以用 Guava 将文本换行到给定的宽度吗?

c++ - 如何从 C++ 文件中读取字符串和相应的 int?

c++ - 如何读取文件末尾的第 6 个字符 - ifstream?