2010-12-05 31 views
6

Je cours un programme qui nécessite un accès aléatoire à un très gros fichier (environ 151 gigaoctets). Je l'ai constaté que chaque fois qu'il fonctionne sur l'une des machines MacPro dans le laboratoire d'Orchard (détails à http://inst.eecs.berkeley.edu/cgi-bin/clients.cgi?choice=6a&string=), le programme tente de lire une partie spécifique du fichier et se bloque avec une erreur du système de fichiers:java.io.RandomAccessFile Argument non valide pour les fichiers volumineux sur mac

java.io.IOException: Invalid argument 
    at java.io.RandomAccessFile.readBytes(Native Method) 
    at java.io.RandomAccessFile.read(RandomAccessFile.java:322) 

J'utilise simplement la classe 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); 

Il arrive au même endroit exactement pour la même plage exacte d'octets à chaque fois, peu importe lequel des ordinateurs de laboratoire d'Orchard que j'utilise.

J'ai testé ce code sur des ordinateurs DELL exécutant Debian Linux et je n'ai pas eu ce problème.

+0

Que voulez-vous? Explication ou solution? On dirait qu'il pourrait être lié à ceci: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4481658 – thejh

+1

@thejh 2001, Windows 95 vs 2010, Mac ... Est similaire cependant. – khachik

+0

Peut-être que les flux peuvent aider. –

Répondre

1

Vous devez utiliser la commande linux "dd" pour vérifier si le fichier est vraiment lisible à l'emplacement donné. Je suppose que le fichier est sur un lecteur réseau dans le laboratoire MAC, et si vous accédez à votre copie du fichier sur le poste de travail Dell Linux, vous n'obtiendrez pas cette erreur car les disques DELL ne sont pas cassés.