2010-12-28 17 views
5

मेरे पास एक बड़ी फ़ाइल है (अंग्रेजी विकिपीडिया लेख केवल एक्सएमएल फाइलों के रूप में डेटाबेस)। मैं BufferedReader का उपयोग कर एक समय में एक चरित्र पढ़ रहा हूं। छद्म कोड है:EOF निर्धारित करने के लिए थोड़ी देर में BufferedReader तैयार विधि?

file = BufferedReader... 

while (file.ready()) 
    character = file.read() 

क्या यह वास्तव में मान्य है? या ready सिर्फ false लौटाएगा जब यह एचडीडी डेटा वापस करने की प्रतीक्षा कर रहा है और वास्तव में जब EOF तक पहुंच गया है? मैंने if (file.read() == -1) का उपयोग करने की कोशिश की लेकिन मुझे एक अनंत लूप में भागना प्रतीत होता था जिसे मैं सचमुच नहीं मिला।

मैं सोच रहा हूं कि यह पूरी फाइल पढ़ रहा है क्योंकि मेरे आंकड़े बताते हैं कि 444,380 विकिपीडिया पेज पढ़े गए हैं, लेकिन मैंने सोचा कि वहां कई और लेख हैं।

उत्तर

2

यह पूरे इनपुट को पढ़ने की गारंटी नहीं है। ready() बस आपको बताता है कि अंतर्निहित धारा में कुछ सामग्री तैयार है या नहीं। यदि यह किसी नेटवर्क सॉकेट या फ़ाइल पर सारण कर रहा है, उदाहरण के लिए, इसका अर्थ यह हो सकता है कि अभी तक उपलब्ध कोई भी बफर्ड डेटा उपलब्ध नहीं है।

9

Reader.ready() विधि का उपयोग फ़ाइल के अंत के परीक्षण के लिए नहीं किया जाना है। इसके बजाय, यह जांचने का एक तरीका है कि read() कॉल करना ब्लॉक करेगा या नहीं।

यह पता लगाने का सही तरीका है कि आप ईओएफ तक पहुंच चुके हैं read कॉल के परिणाम की जांच करना है।

उदाहरण के लिए, यदि आप एक समय में एक चरित्र पढ़ रहे हैं, read() विधि एक int जो या तो एक मान्य वर्ण या -1 हो सकता है अगर आप अंत फ़ाइल पहुँच गए हैं देता है। इस प्रकार, आपका कोड इस तरह दिखना चाहिए:

int character; 
while ((character = file.read()) != -1) { 
    ... 
} 
संबंधित मुद्दे