Class BufferedInputStream 中的 skip 方法没有恰好跳过 n 个字节

skip method in Class BufferedInputStream is not skipping exactly n bytes

        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字节。如果我再这样做,这次它会正常工作。

这是按规定工作的。来自 spec:

The skip method may, for a variety of reasons, end up skipping over some smaller number of bytes, possibly 0. [...] The actual number of bytes skipped is returned.

你的测试没有证明任何东西,因为你误用了 available()。 Javadoc against 中有一个特定的警告,使用它作为流中剩余的字节数。这不是它的目的。