2011-03-11 96 views
0

我正在使用InputStream從網絡獲取一些數據。我想做一個日誌來檢查InputStream是否有一些東西。 Log("InputStream = "+ is.read())和我得到InputStream = 123 但後來當我使用它時,我得到InputStream = -1。我猜是與迭代器的位置有關,但我還沒有在API of Java中看到您必須使用reset()(如當您使用mark()時)再次讀取inputStream。正在讀取InputStream

回答

2

正確 - 一讀給顧客。一旦你使用流或迭代器,你不能重新使用它。

1

InputStream不允許「偷看」下一個字符;相反,所有讀取方法都會阻塞,直到數據可用。

如果您需要窺視,請使用Java NIO。一個Selector可以告訴你,如果任何通道有數據準備好。

0

您可以將您包裝成PushbackInputStream。然後,你可以這樣做:

int r = in.read(); 
Log("InputStream = "+ r); 
in.unread(r); 

和下面的內容將重新讀取字符

+0

如果沒有可用的字符,這不會掛起嗎? – 2011-03-11 11:51:09

0

example使用mark()reset()重新讀取輸入流,但是它依賴於先驗知識合適的readlimit。根據您的需要,它可能是一個可用的緩衝策略。