Inputstream 的 skip 方法总是 returns 0

skip method always returns 0 of Inputstream

我必须通过读取文件来生成校验和,为此,首先,我必须读取 8 个字节 header 然后跳过一些字节(这将是可变长度的,它可用于每个文件)。但是在读取前 8 个字节并存储到字节数组后,如果我 运行 跳过同一个输入流,它总是 returns 0。我无法找出可能是什么原因。请在下面找到部分代码:

    MessageDigest md = MessageDigest.getInstance("SHA1");
DigestInputStream din = new DigestInputStream(inputstream, md);
while(din.read(headerArr,0,8) != -1){
}
byte[]headerData = md.digest();
//skip some bytes
long skippedBytes = inputstream.skip(bytesTobeskipped);

但是,如果我不阅读 header 那么 skip 工作正常,它会尝试跳过提供的字节。 所以,请帮我解决这个问题,或者指出我做错了什么。

But after reading first 8 bytes

while(din.read(headerArr,0,8) != -1){
    }

您没有阅读前 8 个字节。您正在读取最后 8 个字节,或者更确切地说,是在读取了一些未知数量的先前字节之后的最后一个字节。

while 更改为 if,并且不要忽略 read() 方法返回的计数。