【问题标题】:IndexOutofBounds when using Java's read bytes使用 Java 的读取字节时的 IndexOutofBounds
【发布时间】:2013-09-27 15:47:11
【问题描述】:

我在 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();
}

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

【问题讨论】:

  • 哪个值有offset

标签: java indexoutofboundsexception randomaccessfile


【解决方案1】:

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

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

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

【讨论】:

  • 我认为你是对的。我将 offset 参数误解为文件指针的偏移量。但是文档声明数据是从当前文件指针中读取的。
  • 如果这最终是问题,请考虑支持/接受答案,它可能对其他用户有用。
  • 这里有同样的问题!完全误解了文档,并认为偏移量在文件中。
  • @wayway 很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多