2

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

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

4

1 回答 1

7

代替:

raf.getBytes(temp,4096,4096);

听起来你想要:

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

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

于 2013-10-30T17:11:35.387 回答