【问题标题】:skip method always returns 0 of Inputstreamskip 方法总是返回 Inputstream 的 0
【发布时间】:2015-04-08 04:36:55
【问题描述】:

我必须通过读取文件来生成校验和,为此,首先,我必须读取 8 个字节的标头,然后跳过一些字节(这将是可变长度,并且可用于每个文件)。但是在读取前 8 个字节并存储到字节数组之后,如果我在同一个输入流上运行 skip,它总是返回 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);

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

【问题讨论】:

    标签: java inputstream fileinputstream


    【解决方案1】:

    但在读取前 8 个字节后

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

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

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

    【讨论】:

    • 感谢您宝贵的 cmets。是的,现在它可以工作了:)。我还有一个疑问,一旦我从输入流中读取前 8 个字节,指针是在下一个字节上还是在开始 pos 时会在那里,因为现在我必须跳过 remiang 字节,所以如果要跳过 remiang 字节跳过,假设接下来的 50 个字节,那么我应该跳过 58 个字节还是 50 个字节?
    • 当您阅读时,指针会前进。如果读取 8 并跳过 50,则下一个字节是 #58。
    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2014-07-02
    • 1970-01-01
    • 2015-09-27
    • 2014-03-20
    • 2013-04-13
    • 2013-03-30
    • 2016-07-13
    相关资源
    最近更新 更多