COD*_*ACK 0 java io binaryfiles
我声明并分配一些字节数组.我想用read(字节数组,偏移量,字节长度)方法初始化这些数组.第一个读取方法语句似乎正确地将前32个字节读入数组.但是,第二个读取方法不会抛出indexOutOfBounds异常.
偏移值的规范:
offset 0, length 32 bytes - contains some text
offset 32, length 2 bytes - contains something else
etc
Run Code Online (Sandbox Code Playgroud)
这是代码:
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();
Run Code Online (Sandbox Code Playgroud)
我正在假设(可能不正确)在每个新的.read()方法语句中读取位置将自动增加.然而,如果我将34个元素分配给array2而不是仅仅2个元素,则不会抛出任何异常.因此,看起来前34个字节被读入array2而不是最后2个字节,即使我指定了偏移和字节长度......
我意识到RandomAccessFile类有一个漂亮的.seek(n)方法.但是,我很顽固,并希望坚持使用DataInputStream.
关于正确使用的任何建议,以便使用指定的偏移量和字节长度获得的数据初始化两个数组?
offset参数是of read(byte[] arr, int offset, int length)的偏移量arr.不是流的偏移量.
从而
in.read(array2, 32, 2);
Run Code Online (Sandbox Code Playgroud)
意味着你想要从in中读取2个字节InputStream到array2偏移量32,但是array2只有2个字节的长度.这导致了IndexOutOfBounds.
使用
in.read(array2, 0, 2);
Run Code Online (Sandbox Code Playgroud)
从中填充array2接下来的2个字节InputStream.
| 归档时间: |
|
| 查看次数: |
4305 次 |
| 最近记录: |