IndexOutofBounds使用Java的读取字节

时间:2013-09-22 18:49:43

标签: java indexoutofboundsexception randomaccessfile

我在Java 6中使用RandomAccessFile但在读取字节时有一些奇怪的行为。

使用以下代码,正确初始化offsetdata

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

我得到以下堆栈跟踪:

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)

但是,使用相同的offsetdata值,以下(看似相同的)代码运行正常!

randFile.seek(offset);

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

有没有人能够了解这可能是什么原因?

1 个答案:

答案 0 :(得分:7)

猜猜,但你可能offset大于0;如果您从大于0的位置开始读取data.length个字节,则会传递data数组的末尾,这可能会抛出IndexOutOfBoundsException

因此,如果要读取完整数组,offset变量应设置为0。此外,如果您不想从0开始,则应阅读data.length - offset字节.-

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