0

我完全理解机制标记和重置是如何工作的:但是我想知道为什么从这里获取的以下代码即使我用 br.mark(0) 替换 br.mark(26) 也可以工作。由于参数是要在标记之前读取的字符数。如果我将 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());
4

1 回答 1

1

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

在读取达到此限制或超过此限制的字符后尝试重置流可能会失败。

(强调我的)

于 2013-07-29T18:13:39.680 回答