我声明并分配了一些字节数组。我想用 read(byte array, offset, byte length) 方法初始化这些数组。第一个 read 方法语句似乎正确地将前 32 个字节读入数组。但是,第二个读取方法不会并引发 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() 方法语句期间自动增加。然而,如果我将 34 个元素分配给 array2 而不是 2 个元素,则不会引发异常。因此,似乎前 34 个字节被读入 array2 而不是最后 2 个字节,即使我指定了偏移量和字节长度......
我意识到 RandomAccessFile 类有一个漂亮的 .seek(n) 方法。但是,我很固执,想坚持使用 DataInputStream。
关于正确使用的任何建议,以便使用使用指定偏移量和字节长度获得的数据初始化两个数组?