我在Java 6中使用RandomAccessFile但在读取字节时有一些奇怪的行为。
使用以下代码,正确初始化offset
和data
:
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)
但是,使用相同的offset
和data
值,以下(看似相同的)代码运行正常!
randFile.seek(offset);
for (int i = 0; i < (data.length); i += 1) {
data[i] = randFile.readByte();
}
有没有人能够了解这可能是什么原因?
答案 0 :(得分:7)
猜猜,但你可能offset
大于0
;如果您从大于0的位置开始读取data.length
个字节,则会传递data
数组的末尾,这可能会抛出IndexOutOfBoundsException
。
因此,如果要读取完整数组,offset
变量应设置为0
。此外,如果您不想从0开始,则应阅读data.length - offset
字节.-
randFile.readFully(data, offset, data.length - offset);