2011-05-29 53 views
4

如果我呼叫IOUtils.toString(reader);,它將返回正確的字符串值。第二個電話會返回""。重置不支持閱讀器Java:我如何多次閱讀Reader?

我該如何解決這種情況?

+3

並非所有'Reader'和'InputStream'都具有重置功能。在調用reset()之前,使用'bool markSupported()'對於讀者或者'InputStream'來查看你的輸入是否支持它。 – 2011-05-29 22:43:50

回答

4

如果Reader不支持mark()reset(),則不能使Reader「可重複讀取」。但是你可以使用String從你所示創建StringReader任意次數的調用返回,讀那些需要(或使用mark()reset()在單個實例上重新閱讀需要。)

+0

。 – asgs 2011-05-29 22:46:50

3

使用支持重置的java.io.Reader,例如CharArrayReader(請參閱http://download.oracle.com/javase/6/docs/api/java/io/CharArrayReader.html)。

A BufferedReader如果設置了標記,還支持有限數量的字符的重置()。

更一般地說,markSupported方法指示您使用的Reader的實現是否支持標記/重置(感謝來自Bala R指出的評論)。

+0

根據緩衝區大小,你可以重置的字符數也有限制的BufferedReader。 – MeBigFatGuy 2011-05-29 22:47:47

+0

好點,編輯回答考慮到這一點。 「StringReader」的+1號爲 – 2011-05-29 22:50:04