2010-06-02 15 views
11

के रूप में जावा फ्लोट्स की एक फ़ाइल का इलाज करना क्लोजर में जावा पर क्रमबद्ध फ्लोट मान वाले फ़ाइल पर आलसी अनुक्रम प्राप्त करने के लिए एक आदर्श तरीका क्या होगा? (मैंने लाइन-रीडिंग उदाहरणों के आधार पर with-open दृष्टिकोण के साथ खिलवाड़ किया है लेकिन धाराओं को फ्लोट के रूप में स्ट्रीम करने के लिए डॉट्स को कनेक्ट नहीं कर सकता है।)आलसी क्लोजर अनुक्रम

धन्यवाद।

+0

प्रति पंक्ति एक फ्लोट, या टैब से अलग, या अंतरिक्ष से अलग? क्या आप कुछ उदाहरण डेटा दे सकते हैं? –

+0

स्पष्टीकरण: फ़ाइल में जावा फ्लोट्स (यानी सरल प्रकार "फ्लोट") के द्विआधारी क्रमिकरण होते हैं, यह किसी भी चीज़ से अलग नहीं होता है। मैं (संभावित रूप से बहुत बड़ी) फ़ाइल में प्रत्येक प्रविष्टि के आधार पर एक गणना करना चाहता हूं - कल्पना करें कि मैं उन्हें सब कुछ जोड़ना चाहता हूं। अर्थात। मैं सिर्फ सभी मूल्यों पर आलसी अनुक्रम चाहता हूं। – Cumbayah

उत्तर

15
(defn float-seqs [#^java.io.DataInputStream dis] 
    (lazy-seq 
    (try 
     (cons (.readFloat dis) (float-seqs dis)) 
     (catch java.io.EOFException e 
     (.close dis))))) 

(with-open [dis (-> file java.io.FileInputStream. java.io.DataInputStream.)] 
    (let [s (float-seqs dis)] 
    (doseq [f s] 
     (println f)))) 

आप के साथ खुले उपयोग करने के लिए करता है, तो क्या आप वाकई पूरे seq उपभोग करने के लिए जा रहे हैं कर रहे हैं की आवश्यकता नहीं है।

यदि आप खुले उपयोग करते हैं, तो दोबारा जांच लें कि आप अपने दायरे के बाहर सेक (या व्युत्पन्न सीईसी) को लीक नहीं कर रहे हैं।

+0

सुरुचिपूर्ण। धन्यवाद। – Cumbayah

+0

ग्रेट: यह मेरे दिमाग में आलसी-सीक के उपयोग को प्रकाशित करता है। अंततः यह क्लिक किया। –

संबंधित मुद्दे