असल में, मेरे पास एक यूआरएल है जो नए संदेश पोस्ट किए जाने पर चैट रूम से एक्सएमएल अपडेट स्ट्रीम करता है। मैं उस यूआरएल को इनपुटस्ट्रीम में बदलना चाहता हूं और जब तक कनेक्शन बनाए रखा जाता है तब तक इसे पढ़ना जारी रखता है और जब तक मैंने Thread.interrupt() नहीं भेजा है। जिस समस्या का मैं अनुभव कर रहा हूं वह यह है कि स्ट्रीम से पढ़ने के लिए सामग्री होने पर BufferedReader.ready() सच साबित नहीं होता है।एक HttpsURL कनेक्शन से जावा गैर-अवरुद्ध इनपुटस्ट्रीम कैसे बनाएं?
मैं निम्नलिखित कोड का उपयोग कर रहा: जब मैं कोड चलाने
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() को सही करने के लिए मिलता है, या बी) ब्लॉकिंग को रोकने के लिए इस तरह से ऐसा करें?
अग्रिम धन्यवाद, जेम्स
प्रत्येक कनेक्शन को अलग थ्रेड में विभाजित किया जाना चाहिए। – Nick