2013-10-30 47 views
2

在Java中,我正在使用RandomAccessFile进行一些工作。我有一个8192字节或8kb的文件。为什么我在这个Java程序中得到ArrayIndexOutOfBoundsException?

以下是导致一个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,这就是为什么我很困惑,为什么这是n ot working:

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

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

+2

请告诉我们并告诉我们bp1是什么。这似乎是您隐藏在我们身上的关键信息。 –

+2

为什么这是downvoted?! – 2013-10-30 17:11:05

+0

修正了,我的错误。 – elykl33t

回答

7

相反的:

raf.getBytes(temp,4096,4096); 

这听起来像你想:

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

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

+0

解决了我原来的帖子,你可能会相应地更新你的吗?虽然我认为这些变化很小,但我相信我会明白你的意思。 – elykl33t

+0

啊,所以我的问题是,我告诉它开始写入临时索引4096,导致出界异常? – elykl33t

+1

现在应该修复。 – pobrelkey

相关问题