2016-03-02 3 views
5

मैं एक जावा BufferedReader से पाठ पढ़ रहा हूँ इस तरह:स्ट्रीम "बंद करें"?

Stream.continually(reader.readLine).takeWhile { 
    case null => reader.close; false 
    case _ => true 
} 

यह काम करता है, लेकिन सिर्फ एक छोटे से मेरे लिए अनाड़ी लगता है। मेरी इच्छा है कि .whenDoneStream पर कुछ ऐसा था, ताकि मैं इसे पूरी चीज के उपभोग के बाद पाठक को बंद करने के लिए कह सकूं, और फिर .takeWhile(_ != null) करें।

क्या ऐसा करने का कोई तरीका है जिसके बारे में मुझे नहीं पता? या, शायद, जावा Reader से लाइनों की धारा प्राप्त करने का एक बेहतर तरीका (यदि यह InputStream था, तो मैं उदाहरण के लिए Source.fromInputStream कर सकता था, लेकिन Reader के लिए समकक्ष प्रतीत नहीं होता ... नोट, यह यद्यपि समस्या केवल आंशिक रूप से हल हो जाएगी, क्योंकि कोई अन्य "बंद करने योग्य" ऑब्जेक्ट्स के साथ एक ही चीज़ करना चाहता है - उदाहरण के लिए ResultSet)?

उत्तर

1

आप जोड़कर .whenDone व्यवहार प्राप्त कर सकते हैं। यह कोड को थोड़ा अधिक अभिव्यक्त बनाता है और अन्य मामलों में भी इसका उपयोग किया जा सकता है। यह कुछ है लेकिन मुझे लगता है कि बिल्कुल सही है।

def closeStream: Stream[Nothing] = { 
    reader.close 
    Stream.Empty 
} 

Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream 
संबंधित मुद्दे