java.io.RandomAccessFile Неверный аргумент для больших файлов на Mac - PullRequest
6 голосов
/ 05 декабря 2010

Я запускаю программу, которой нужен произвольный доступ к очень большому файлу (примерно 151 гигабайт). Я обнаружил, что всякий раз, когда он запускается на одном из компьютеров MacPro в лаборатории Orchard (подробности на 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 я использую.

Я тестировал этот код на компьютерах DELL под управлением Debian Linux, и у меня не было этой проблемы.

1 Ответ

1 голос
/ 10 января 2011

Вы должны использовать команду linux "dd", чтобы проверить, действительно ли файл доступен для чтения в указанном месте.Я предполагаю, что файл находится на сетевом диске в лаборатории MAC, и если вы получите доступ к своей копии файла на рабочей станции Dell linux, вы не получите эту ошибку, поскольку диски DELL не повреждены.

...