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


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

最佳答案

代替:

raf.getBytes(temp,4096,4096);


听起来像您想要的:

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


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

10-08 18:12