2012-02-12 13 views
5

मैं जावा एनओओ में एक फ़ंक्शन को कैसे कार्यान्वित करूं, अगलीलाइनइन() जो फाइलचैनल से अगली पंक्ति को पढ़ता है क्योंकि फाइल बड़ी हो सकती है, मेरा प्रारंभिक विचार आकार के बाइटबफर में अधिक पढ़ना था यदि आवश्यक हो तो फ़ाइलChannel से मौजूद लाइन की अधिकतम लंबाई और पढ़ा जा सकता है, लेकिन समस्या जो मैं देखता हूं वह है कि मैं बाइट्स के अंतिम अनुक्रम को कैसे पढ़ूं जो एक नई लाइन में समाप्त नहीं होता है। मैं यह भी कैसे सुनिश्चित करूं कि अगलाLineNio() फ़ंक्शन विफल नहीं होता क्योंकि nio api asynchronous है। कोई मदद या पहले से ही मौजूदा कार्यान्वयन?फ़ाइल से जावा एनओ रीडिंग लाइन

धन्यवाद

उत्तर

2

@EJP बताते हैं के रूप में, यह काफी संभावना है कि आप BufferedReader.readLine() जब तक आप जानते हैं कि यह उपयुक्त नहीं है का उपयोग करते हुए पर्याप्त प्रदर्शन की तुलना में अधिक हो जाएगा है, यह मैं आप चीजों को रखने के क्या सुझाव है कि है सरल।

http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html


मैं स्मृति पूरी फ़ाइल नक्शा और नई-पंक्तियों एक समय में एक लाइन प्राप्त करने के लिए के लिए खोज करेंगे। इस बफ़र आकार या एक से अधिक के बारे में चिंता करने के लिए पढ़ता है (या बहुत ज्यादा पढ़ने की समस्या) की जरूरत

NIO तुल्यकालिक डिफ़ॉल्ट रूप से है, फ़ाइल आईओ केवल तुल्यकालिक है (जावा 7 बजे तक) से बचें। सॉकेट एसिंक्रोनस बनाने के लिए आपको एक विशेष सेटर कॉल करना होगा।

+0

मैं नहीं करूँगा। मैं एक बुफर्ड रीडर का उपयोग करूंगा। मैं किसी भी एकल फ़ाइल को छोड़कर मैप किए गए एनआईओ का उपयोग नहीं करता जो प्रोग्राम के जीवनकाल के लिए खुला होने वाला था, उदा। एक स्व-कार्यान्वित डेटाबेस। – EJP

+0

@EJP, उत्कृष्ट बिंदु। मुझे यह पूछना चाहिए था कि आपको पहले स्थान पर एनआईओ की आवश्यकता है या नहीं। –

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