【问题标题】:Why am I getting ArrayIndexOutOfBoundsException in this Java program?为什么我在这个 Java 程序中得到 ArrayIndexOutOfBoundsException?
【发布时间】:2013-11-10 10:43:56
【问题描述】:

在 Java 中,我正在使用 RandomAccessFile 做一些工作。我有一个 8192 字节或 8kb 的文件。

以下导致 ArrayIndexOutOfBoundsException:

File file = new File("TestFile1");
raf = new RandomAccessFile(file, "rw");
byte[] temp = new byte[4096];
raf.read(temp, 4096, 4096);

即使是这样的事情也会导致同样的错误:

raf.read(temp, 4096, 1);

虽然这样的事情很完美:

raf.read(temp, 0, 4096);

当我运行以下命令时,我得到 8192,这就是为什么我不知道为什么它不起作用:

System.out.println(raf.getChannel().size());

如果我尝试从文件的后半部分读取,为什么会出现越界错误?

【问题讨论】:

  • 请告诉我们并告诉我们什么是 bp1。这似乎是您向我们隐瞒的关键信息。
  • @matheszabi:我对这个问题投了反对票,因为所问的问题太模棱两可了,遗漏了关键信息。此后,它已得到纠正,并删除了反对票。
  • 谢谢@HovercraftFullOfEels

标签: java io indexoutofboundsexception


【解决方案1】:

代替:

raf.getBytes(temp,4096,4096);

听起来像你想要的:

raf.seek(4096); raf.getBytes(temp,0,4096);

getBytes 的第二个参数给出了将读取内容的缓冲区的偏移量,而不是文件的偏移量。

【讨论】:

  • 修复了我原来的帖子,你能相应地更新你的吗?虽然我认为变化很小,但我相信我明白你在说什么。
  • 啊,所以我的问题是我告诉它在索引 4096 处开始写入 temp,导致越界异常?
  • 是的,您正试图将内容读入超出temp 末尾的区域。这就是为什么,例如,raf.getBytes(temp,4095,1) 可以工作,而raf.getBytes(temp,4095,2) 却不行。
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多