gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:29:42 25 4
gpt4 key购买 nike

我声明并分配一些字节数组。我想用 read(byte array, offset, byte length) 方法初始化这些数组。第一个 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() 方法语句期间自动增加。然而,如果我向 array2 分配 34 个元素而不是仅 2 个元素,则不会引发异常。因此,尽管我指定了偏移量和字节长度,但似乎前 34 个字节被读入 array2,而不是仅最后 2 个字节...

我意识到 RandomAccessFile 类有一个漂亮的 .seek(n) 方法。然而,我很顽固,想坚持使用 DataInputStream。

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

最佳答案

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

因此

in.read(array2, 32, 2);

表示要从InputStream中读取2个字节进入array2位于偏移量 32 处,但 array2 的长度只有 2 个字节。这会导致 IndexOutOfBounds .

使用

in.read(array2, 0, 2);

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

关于java - 如何使用 DataInputStream 类通过指定偏移量和字节长度将字节读入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com