2011-03-11 94 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。根据您的需要,它可能是一个可用的缓冲策略。