我拥有的BufferedInputStream没有正确标记。这是我的代码:

public static void main(String[] args) throws Exception {
    byte[] b = "HelloWorld!".getBytes();
    BufferedInputStream bin = new BufferedInputStream(new ByteArrayInputStream(b));
    bin.mark(3);
    while (true){
        byte[] buf = new byte[4096];
        int n = bin.read(buf);
        if (n == -1) break;
        System.out.println(n);
        System.out.println(new String(buf, 0, n));
    }
}


这是输出:

11
HelloWorld!


我希望它输出

3
Hel
8
loWorld!


我还尝试了使用纯ByteArrayInputStream作为bin的代码,但是它也不起作用。

最佳答案

我认为您误解了mark的作用。

mark的目的是使流记住其当前位置,因此以后可以使用reset()返回到它。参数不是接下来要读取多少个字节,而是在标记被视为无效之前可以读取多少个字节(即:您将无法reset()返回到它;您可以要么会获得异常,要么会在流的开头结束)。

有关详细信息,请参见the docs on InputStream。读者的mark方法工作原理非常相似。

关于java - BufferedInputStream没有标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3764479/

10-10 16:31