Frage IndexOutofBounds, wenn Java-Lesebytes verwendet werden


Ich benutze ein RandomAccessFile in Java 6, aber seltsames Verhalten beim Lesen von Bytes.

Mit dem folgenden Code, wo offset und data werden entsprechend initialisiert:

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

Ich bekomme folgende 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 dataDer folgende (scheinbar identische) Code funktioniert einwandfrei!

randFile.seek(offset);

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

Hat jemand einen Einblick, warum das so sein könnte?


5
2017-09-22 18:49


Ursprung


Antworten:


Nur raten, aber Sie haben wahrscheinlich eine offset größer als 0; wenn du liest data.length Bytes, die von einer Position größer als 0 ausgehen, übergeben Sie das Ende des data Array, das die werfen kann IndexOutOfBoundsException.

Also, wenn Sie das vollständige Array lesen möchten, offset Variable sollte auf eingestellt werden 0. Außerdem, wenn Sie nicht von 0 beginnen möchten, sollten Sie lesen data.length - offset Bytes.-

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

7
2017-09-22 18:53