5

我在 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)

但是,使用相同的offsetand值data,以下(看似相同)代码可以正常工作!

randFile.seek(offset);

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

有人知道为什么会这样吗?

4

1 回答 1

7

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

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

randFile.readFully(data, offset, data.length - offset);
于 2013-09-22T18:53:30.473 回答