在Java中标记()/重置BufferedReader

时间:2013-07-29 18:04:19

标签: java reset bufferedreader

我完全理解机制标记和重置是如何工作的: 但是我想知道为什么以下代码取自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());

1 个答案:

答案 0 :(得分:1)

因为这不是一个严格的限制,它只是建议。正如javadoc所说:

  

尝试在读取此限制或超出之后的字符时重置流可能失败。

(强调我的)