我必须通过读取文件来生成校验和,首先,我必须读取8字节的标题,然后跳过一些字节(这将是可变长度,并且可用于每个文件)。但是在读取前8个字节并存储到字节数组后,如果我在相同的输入流上运行跳过,它总是返回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);
但是,如果我没有读取标题然后跳过工作正常,它会尝试跳过提供的字节。 所以,请帮我解决这个问题,或者指出我做错了什么。
答案 0 :(得分:1)
但是在读完前8个字节后
while(din.read(headerArr,0,8) != -1){
}
您没有读取前8个字节。您正在读取最后8个字节,或者更确切地说是读取了一些未知数量的先前字节后的最后一个字节。
将while
更改为if
,不要忽略read()
方法返回的计数。