BufferedInputStream没有标记

时间:2010-09-21 21:07:42

标签: java inputstream

我拥有的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的代码,但它也没有用。

2 个答案:

答案 0 :(得分:5)

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

mark的目的是让流记住其当前位置,以便稍后使用reset()返回。参数不是接下来要读取的字节数 - 它是在标记被视为无效之前你能够读取的字节数(即:你将无法reset()返回它;你要么得到一个例外,要么最后在流的开头结束)。

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

答案 1 :(得分:2)

这不是mark()的作用。您需要重新阅读文档。 Mark允许您通过流向后