По сути, у меня есть URL-адрес, который передает XML-обновления из чата при публикации новых сообщений. Я хотел бы превратить этот URL-адрес в InputStream и продолжать чтение из него, пока поддерживается соединение и пока я не отправил Thread.interrupt(). Проблема, с которой я сталкиваюсь, заключается в том, что BufferedReader.ready(), похоже, не становится истинным, когда есть контент, который нужно прочитать из потока.
Я использую следующий код:
BufferedReader buf = new BufferedReader(new InputStreamReader(ins));
String str = "";
while(Thread.interrupted() != true)
{
connected = true;
debug("Listening...");
if(buf.ready())
{
debug("Something to be read.");
if ((str = buf.readLine()) != null) {
// str is one line of text; readLine() strips the newline character(s)
urlContents += String.format("%s%n", str);
urlContents = filter(urlContents);
}
}
// Give the system a chance to buffer or interrupt.
try{Thread.sleep(1000);} catch(Exception ee) {debug("Caught thread exception.");}
}
Когда я запускаю код и публикую что-то в чате, buf.ready() никогда не становится истинным, в результате чего строки никогда не читаются. Однако, если я пропущу часть «buf.ready()» и просто прочитаю строки напрямую, дальнейшие действия будут заблокированы до тех пор, пока строки не будут прочитаны.
Как мне либо а) заставить buf.ready() возвращать true, либо б) сделать это таким образом, чтобы предотвратить блокировку?
Заранее спасибо, Джеймс