में स्कैला/जावा में फ़ाइलों को इटरेट करना यह प्रतीत होता है कि एनओओ .list
एक धारा लौटाता है जो प्रति उपभोग करने पर एक फ़ाइल डिस्क्रिप्टर पर रखता है, जब तक .close
पूरी स्ट्रीम पर नहीं कहा जाता है। इसका मतलब है कि 1000 फाइलों के साथ डेटा निर्देशिका सामान्य ulimit
मानों के विरुद्ध आसानी से ब्रश कर सकती है। इस फ़ाइल डिस्क्रिप्टर संचय का समग्र प्रभाव, नेस्टेड ट्रैवर्सल से निपटने के दौरान आगे बढ़ता है।ओ (1) ओपन फाइल डिस्क्रिप्टर
ओएस फ़ाइल सूची कमांड पर कॉल करने के लिए नीचे जाने के अलावा, बड़ी निर्देशिकाओं की फ़ाइलों पर पुन: प्रयास करने का एक वैकल्पिक तरीका क्या हो सकता है? यदि बड़ी निर्देशिका की फ़ाइलों को पुन: सक्रिय किया जाए तो यह अच्छा होगा, एक फ़ाइल डिस्क्रिप्टर केवल वर्तमान पुनरावृत्त फ़ाइल के अनुसार ही बनाए रखा जाएगा, जैसा कि उचित स्ट्रीम सेमेटिक्स द्वारा निहित किया गया है।
संपादित करें:
list
java.nio.file.Path
की एक जावा स्ट्रीम कौन सा API कॉल प्रत्येक आइटम leaner यात्रा के लिए है, न कि केवल जब पूरे धारा को बंद कर दिया जा रहा है की तुलना में धारा पर बंद करने संसाधित होने के बाद किया गया है, के लिए इस्तेमाल किया जाएगा देता है? स्कैला में, इसे here से बेहतर, बेहतर फ़ाइलों से एपीआई रैपर का उपयोग करके आसानी से जोड़ा जा सकता है।
"करने के लिए फ़ाइल प्रति एक फ़ाइल वर्णनकर्ता दोहराया पर रखती है, जब तक .close पर कहा जाता है पूरी धारा "आप उस निष्कर्ष पर कैसे आए? – Tunaki
मैं जेएमएक्स (ओबंटू पर ओराकल जावा 8 पर स्कैला 2.11) के माध्यम से फाइल डिस्क्रिप्टरों को गिनने के बाद, '.list' के परिणाम को दोबारा शुरू करने के बाद और पुनरावृत्ति के बाद' बंद 'के बिना कॉल करने के बाद उस निष्कर्ष पर आया। – matanster
स्पार्क में कस्टम आरडीडी के साथ एक ही समस्या थी। अंत में सभी खुले कनेक्शन बंद करने के लिए खुले कनेक्शन और एक करीबी() विधि की एक सूची जोड़ा गया। हो सकता है कि आप पहले से स्ट्रीम की गई फ़ाइल को बंद करने के लिए इटेटर कोड को संशोधित कर सकें। –