Java 如何通过使用DataInputStream类指定偏移量和字节长度将字节读入数组?

Java 如何通过使用DataInputStream类指定偏移量和字节长度将字节读入数组?,java,io,binaryfiles,Java,Io,Binaryfiles,我声明并分配一些字节数组。我想用read(字节数组、偏移量、字节长度)方法初始化这些数组。第一个read方法语句似乎将前32个字节正确地读入数组。但是,第二个read方法不执行此操作,并引发indexOutOfBounds异常 偏移值的规格: offset 0, length 32 bytes - contains some text offset 32, length 2 bytes - contains something else etc 代码如下: File file = new Fi

我声明并分配一些字节数组。我想用read(字节数组、偏移量、字节长度)方法初始化这些数组。第一个read方法语句似乎将前32个字节正确地读入数组。但是,第二个read方法不执行此操作,并引发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


关于使用使用指定偏移量和字节长度获得的数据初始化两个数组的正确用法的任何建议?

读取的
read(byte[]arr,int offset,int length)
的偏移量参数是
arr
的偏移量。不是流的偏移量

因此

意味着您希望从in
InputStream
中读取偏移量32处的2个字节到
array2
,但array2的长度只有2个字节。这会导致
索引自动边界

使用

InputStream
中接下来的2个字节填充
array2

in.read(array2, 32, 2);
in.read(array2, 0, 2);