2013-09-22 10 views
5

Ich benutze eine RandomAccessFile in Java 6, aber mit seltsamen Verhalten beim Lesen von Bytes.IndexOutofBounds bei Verwendung von Javas gelesenen Bytes

Mit folgendem Code, wo offset und data entsprechend initialisiert werden:

int offset; 
byte data[]; 
randFile.readFully(data, offset, data.length); 

bekomme ich folgenden Stack-Trace:

null 
java.lang.IndexOutOfBoundsException 
    at java.io.RandomAccessFile.readBytes(Native Method) 
    at java.io.RandomAccessFile.read(RandomAccessFile.java:355) 
    at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414) 

ABER, mit den gleichen Werten von offset und data, die folgender (scheinbar identischer) Code funktioniert einwandfrei!

randFile.seek(offset); 

for (int i = 0; i < (data.length); i += 1) { 
    data[i] = randFile.readByte(); 
} 

Hat jemand Einblick in warum dies sein könnte?

+1

Welcher Wert hat 'lesen offset'? – ssantos

Antwort

6

Nur Raten, aber Sie haben wahrscheinlich eine offset größer als 0; Wenn Sie data.length Bytes ab einer Position größer als 0 lesen, werden Sie das Ende des data Arrays passieren, das möglicherweise die IndexOutOfBoundsException wirft.

Wenn Sie also das vollständige Array lesen möchten, sollte offset Variable auf 0 gesetzt werden. Übrigens, wenn Sie von 0 bis starten wollen nicht, sollten Sie data.length - offset bytes.-

randFile.readFully(data, offset, data.length - offset); 
+0

Ich denke du bist richtig. Ich habe den Offset-Parameter als Offset des Dateizeigers missverstanden. Die Dokumentation besagt jedoch, dass Daten aus dem aktuellen Dateizeiger gelesen werden. – jaynp

+0

Wenn das schließlich das Problem war, bitte, upvoting/accept-Antwort in Betracht ziehen, kann es für andere Benutzer nützlich sein. – ssantos

+0

Hatte das gleiche genaue Problem hier! Die Dokumentation total falsch interpretiert und gedacht, dass der Offset in der Datei war. – wayway