いくつかのバイト配列を宣言して割り当てます。これらの配列を read(byte array, offset, byte length) メソッドで初期化したい。最初の read メソッド ステートメントは、最初の 32 バイトを正しく配列に読み取ったようです。ただし、2 番目の読み取りメソッドはそうではなく、indexOutOfBounds 例外をスローします。
オフセット値の仕様:
offset 0, length 32 bytes - contains some text
offset 32, length 2 bytes - contains something else
etc
コードは次のとおりです。
File file = new File("somebinaryfile.dat");
DataInputStream in = new DataInputStream(new FileInputStream(file));
byte[] array1 = new byte[32]; // first array
byte[] array2 = new byte[2]; // second array
in.read(array1, 0, 32);
in.read(array2, 32, 2);
in.close();
私は、新しい .read() メソッドステートメントごとに読み取り位置が自動的に増加するという仮定の下で作業しています(おそらく間違っています)。ただし、2 つの要素ではなく 34 の要素を array2 に割り当てると、例外はスローされません。したがって、オフセットとバイト長を指定しているにもかかわらず、最後の 2 バイトだけでなく、最初の 34 バイトが array2 に読み込まれているように見えます...
RandomAccessFile クラスには気の利いた .seek(n) メソッドがあることに気付きました。ただし、私はかなり頑固で、DataInputStream に固執したいと考えています。
指定されたオフセットとバイト長を使用して取得したデータで 2 つの配列を初期化するための正しい使用法に関するアドバイスはありますか?