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()
方法返回的计数。
感谢您的宝贵意见。是的,现在它工作:)。我还有一个疑问,一旦我从输入流中读取前8个字节,指针是否在下一个字节上,或者它会在起始位置,因为现在我必须跳过重新传输的字节,所以如果要跳过remiang字节跳过,假设接下来的50个字节,那么我是否跳过58个字节或50个字节? – piks 2015-02-08 10:36:18
当你阅读时,指针前进。如果您读取8并跳过50,则下一个字节是#58。 – EJP 2015-02-08 11:28:22