java - How to determine the exact state of a BufferedReader? -


मेरे पास BufferedReader ( new BufferedReader (new InputStreamReader (process.getInputStream ())) )। मैं एक BufferedReader की अवधारणा के लिए काफी नया हूं, लेकिन जैसा कि मैंने इसे देखा है, उसके पास तीन राज्य हैं:

  1. एक पंक्ति पढ़ने की प्रतीक्षा कर रही है; कॉलिंग bufferedReader.readLine इस स्ट्रिंग को तुरन्त वापस कर देगा।
  2. स्ट्रीम खुली है, लेकिन पढ़ने की प्रतीक्षा करने वाली कोई रेखा नहीं है; कॉलिंग bufferedReader.readLine एक पंक्ति उपलब्ध होने तक धागा लटकाएगा।
  3. स्ट्रीम बंद है; कॉलिंग bufferedReader.readLine शून्य पर लौटाएगा।

अब मैं BufferedReader की स्थिति निर्धारित करना चाहता हूं, ताकि मैं यह निर्धारित कर सकूं कि क्या मैं अपने आवेदन को लटकाए बिना इसे सुरक्षित रूप से पढ़ सकता हूं। अंतर्निहित प्रक्रिया (ऊपर देखें) कुख्यात अविश्वसनीय है और इसलिए शायद लटका हो सकता है; इस मामले में, मैं अपने मेजबान आवेदन को लटका नहीं चाहता इसलिए मैं एक प्रकार का टाइमआउट लागू कर रहा हूँ मैंने पहले यह थ्रेडिंग के साथ करने की कोशिश की, लेकिन यह बहुत जटिल हो गया।

कॉलिंग BufferedReader.ready () ऊपर के मामलों (2) और (3) के बीच अंतर नहीं करेगा दूसरे शब्दों में, यदि तैयार () झूठा लौटाता है, तो यह हो सकता है कि स्ट्रीम केवल बंद हो गई (दूसरे शब्दों में, मेरी अंतर्निहित प्रक्रिया को सुन्दर रूप से बंद कर दिया गया) या यह हो सकता है कि अंतर्निहित प्रक्रिया लटका। >

तो मेरा सवाल यह है कि: मैं यह कैसे तय करूं कि इन तीनों राज्यों में से मेरा BufferedReader वास्तव में readLine को कॉल किए बिना क्या है? दुर्भाग्य से मैं इसे चेक करने के लिए बस readLine कॉल नहीं कर सकता, क्योंकि यह मेरे ऐप को लटका तक खुलता है।

मैं जेडीके संस्करण 1.5 का उपयोग कर रहा हूं।

एक ऐसा राज्य है जहां कुछ डेटा बफर में हो सकता है, लेकिन एक पंक्ति को भरने के लिए आवश्यक नहीं है इस स्थिति में, तैयार () वापस true वापस आ जाएगा, लेकिन कॉलिंग readLine () ब्लॉक होगा।

आपको आसानी से अपना स्वयं का तैयार () और readLine () विधियों को बनाने में सक्षम हो। आपका तैयार () वास्तव में एक लाइन बनाने की कोशिश करेगा, और जब यह बहुत सफलतापूर्वक किया होता तो यह true वापस लौटा लेगा फिर आपका readLine () पूरी तरह से बनाई गई रेखा वापस कर सकता है।


Comments

Popular posts from this blog

asp.net - Change the driver in the connection string to a data source in VB.Net -

objective c - iPhone and it's wireless area -

unix - Listing all shared memory segments used by a process on AIX5.3+ -