代码之家  ›  专栏  ›  技术社区  ›  Leo Izen

BufferedInputStream未标记

  •  1
  • Leo Izen  · 技术社区  · 14 年前

    我的缓冲输入流标记不正确。这是我的密码:

    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 回复  |  直到 14 年前
        1
  •  5
  •   cHao Hammerite    13 年前

    我想你误解了什么 mark 做。

    作记号 现在的 reset() . 参数不是下一步将读取多少字节,而是在标记被认为无效(即:您将无法读取)之前,您可以读取的字节数 重置() 回到它;您要么得到一个异常,要么在流的开头结束)。

    the docs on InputStream 详情。读者的 作记号 方法的工作原理非常相似。

        2
  •  2
  •   dty    14 年前

    mark()不是这么做的。你需要重新阅读文档。马克让你走了 向后的