我完全理解機制標記和重置的工作原理: 但是我想知道爲什麼從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