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()
方法返回的计数。
我必须通过读取文件来生成校验和,为此,首先,我必须读取 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()
方法返回的计数。