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

の 2 番目のパラメーターはgetBytes、ファイルへのオフセットではなく、コンテンツが読み込まれるバッファーへのオフセットを指定します。

于 2013-10-30T17:11:35.387 に答える