अन्य लोगों ने एक ही समय में आपकी फ़ाइल के हिस्सों को पढ़ने और संसाधित करने का सुझाव दिया है। यदि संभव हो, तो उन तरीकों में से एक बेहतर होगा।
हालांकि, यदि यह संभव नहीं है और आप String
को स्मृति में शुरू में स्मृति में लोड करने में सक्षम हैं, लेकिन बाद में यह इस स्ट्रिंग का विश्लेषण कर रहा है जो समस्याएं पैदा करता है, तो आप सबस्ट्रिंग का उपयोग करने में सक्षम हो सकते हैं। जावा में मूल char
सरणी के शीर्ष पर एक उप-स्ट्रिंग मानचित्र और बेस Object
और फिर प्रारंभ और लंबाई int पॉइंटर्स के लिए स्मृति लेता है।
इसलिए, जब आप स्ट्रिंग के एक हिस्से को, जिसे आपने अलग रखना चाहते हैं लगता है, की तरह कुछ का उपयोग करें:
String piece = largeString.substring(foundStart, foundEnd);
इसके बजाय आप इस या कोड है कि आंतरिक रूप से करता है, तो स्मृति उपयोग में नाटकीय रूप से वृद्धि होगी, तो :
new String(largeString.substring(foundStart, foundEnd));
ध्यान दें कि आप यह बहुत ही कारण के लिए देखभाल के साथ String.substring()
उपयोग करना चाहिए। आपके पास एक बहुत बड़ी स्ट्रिंग हो सकती है जिसमें से आप एक सबस्ट्रिंग लेते हैं और फिर मूल स्ट्रिंग के संदर्भ को छोड़ देते हैं। समस्या यह है कि सबस्ट्रिंग अभी भी मूल बड़े char
सरणी का संदर्भ देता है। जीसी तब तक रिलीज नहीं करेगा जब तक कि सबस्ट्रिंग को भी हटा दिया न जाए। इस तरह के मामलों में, वास्तव में new String(...)
का उपयोग करने के लिए उपयोगी है यह सुनिश्चित करने के लिए कि अप्रयुक्त बड़ी सरणी जीसी द्वारा छोड़ी जाएगी (यह उन कुछ मामलों में से एक है जहां आपको कभी भी new String(...)
का उपयोग करना चाहिए)।
एक और तकनीक, यदि आप चारों ओर बहुत कम तारों की अपेक्षा करते हैं और इन्हें समान मान होने की संभावना है, लेकिन बाहरी स्रोत (फ़ाइल की तरह) से आते हैं, तो नई स्ट्रिंग बनाने के बाद .intern()
का उपयोग करना है।
नोट: यह String
के कार्यान्वयन पर निर्भर करता है जिसे आपको वास्तव में अवगत नहीं होना चाहिए, लेकिन बड़े अनुप्रयोगों के लिए अभ्यास में कभी-कभी आपको उस ज्ञान पर भरोसा करना पड़ता है। ध्यान रखें कि जावा के भविष्य के संस्करण इसे बदल सकते हैं (हालांकि संभावना नहीं है)।
स्रोत
2010-01-28 08:23:36
क्या आप पाठकों में से किसी एक के साथ पाठ बिट को पार्स नहीं कर सकते (उदा। BufferedReader)? –