我完全理解机制标记和重置是如何工作的: 但是我想知道为什么以下代码取自here,即使我用br.mark(0)替换br.mark(26)也能正常工作。因为参数是要在标记之前读取的char的数量。如果我把0作为参数,它不应该读任何东西。相反,它就好像我没有改变任何东西。 为什么它会以这种方式表现?
br = new BufferedReader(isr);
// reads and prints BufferedReader
System.out.println((char)br.read());
System.out.println((char)br.read());
System.out.println((char)br.read());
// mark invoked at this position
br.mark(0);
System.out.println("mark() invoked");
System.out.println((char)br.read());
System.out.println((char)br.read());
System.err.println("The Thing to be said:"+(char)br.read());
// reset() repositioned the stream to the mark
br.reset();
System.out.println("reset() invoked");
System.out.println((char)br.read());
System.out.println((char)br.read());
System.out.println((char)br.read());
答案 0 :(得分:1)
因为这不是一个严格的限制,它只是建议。正如javadoc所说:
尝试在读取此限制或超出之后的字符时重置流可能失败。
(强调我的)