Class BufferedInputStream中的skip方法不会正好跳过n个字节

时间:2015-04-12 04:25:09

标签: java skip bufferedinputstream

        int a  = bis.available();
        System.out.println("*****"+a);
        bis.skip(10000);
        a  = bis.available();
        System.out.println("*****"+a);
        bis.skip(10000);
        a  = bis.available();
        System.out.println("*****"+a);

输出:

*****369608
*****361424
*****351424

当我使用skip时,如果我尝试跳过10000,它将只跳过8184个字节。如果我再次这样做,这次它将正常工作。

2 个答案:

答案 0 :(得分:1)

这是按照指定的方式工作。来自spec

  

跳过方法可能由于各种原因最终跳过一些较小的字节数,可能为0. [...]返回跳过的实际字节数。

答案 1 :(得分:1)

您的测试无法证明任何事情,因为您滥用available()。 Javadoc 中有一个特定的警告使用它作为流中重新编写的字节数。这不是它的用途。