Skip方法总是返回0 Inputstream

Skip方法总是返回0 Inputstream

问题描述:

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

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); 

但是,如果我不读头然后跳到做工精细,它试图跳过提供字节。 所以,请帮我解决这个问题,或者指出我做错了什么。

但阅读后前8个字节

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

你不读前8个字节。您正在读取最后8个字节,或读取一些未知字节数后读取最后一个字节。

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

+0

感谢您的宝贵意见。是的,现在它工作:)。我还有一个疑问,一旦我从输入流中读取前8个字节,指针是否在下一个字节上,或者它会在起始位置,因为现在我必须跳过重新传输的字节,所以如果要跳过remiang字节跳过,假设接下来的50个字节,那么我是否跳过58个字节或50个字节? – piks 2015-02-08 10:36:18

+0

当你阅读时,指针前进。如果您读取8并跳过50,则下一个字节是#58。 – EJP 2015-02-08 11:28:22