我完全理解机制标记和重置的工作原理: 但是我想知道为什么从here取下的代码,即使我用br替换br.mark(26) .mark(0)。由于该参数是要在标记之前读取的字符数量。如果我把0作为参数,它不应该读任何东西。相反,它的作用就像我没有改变任何东西。 它为什么会这样?java中的Mark()/ Reset BufferedReader
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());
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#mark(int) - > *可能*会失败。不能保证它会。虽然我不关心Java的“呃,可能做这个或那个”的事情......这很常见。 –
@BrianRoach流被重置,它是标记之后读取的字符数量,克服了我设置的限制。它应该在我调用mark()时重置缓冲区,然后在下一个read()调用中不返回任何内容。但它失败了,所以它也未能设定字符的限制?那么它的服务是什么? – Rollerball