2013-09-22 7 views
5

Sto usando un RandomAccessFile in Java 6 ma ho un comportamento strano durante la lettura dei byte.IndexOutofBounds quando si usano i byte letti di Java

Con questo codice, dove offset e data sono opportunamente inizializzati:

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

ottengo il seguente stack:

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) 

MA, con gli stessi valori di offset e data, la il seguente codice (apparentemente identico) funziona bene!

randFile.seek(offset); 

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

Qualcuno ha idea del perché questo potrebbe essere?

+1

Quale valore ha 'offset'? – ssantos

risposta

6

Solo supposizioni, ma probabilmente uno offset maggiore di 0; se stai leggendo i byte data.length a partire da una posizione maggiore di 0, passerai la fine dell'array data, che potrebbe essere il lancio dello IndexOutOfBoundsException.

Quindi, se volete leggere la serie completa, offset variabile dovrebbe essere impostata su 0. Inoltre, se non si desidera avviare da 0, si dovrebbe leggere data.length - offset bytes.-

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

Penso che tu abbia ragione. Ho frainteso il parametro offset come offset del puntatore del file. Ma la documentazione afferma che i dati vengono letti dal puntatore del file corrente. – jaynp

+0

Se questo è stato finalmente il problema, ti preghiamo di considerare l'upvoting/accettare la risposta, potrebbe essere utile per altri utenti. – ssantos

+0

Aveva lo stesso identico problema qui! Ha interpretato erroneamente la documentazione e pensato che l'offset fosse nel file. – wayway

Problemi correlati