2012-03-01 21 views
5

क्या कुछ तरीके हैं जो मैं स्ट्रिंगबिल्डर को क्लोन कर सकता हूं? मैं बिट्स द्वारा फाइलें पढ़ रहा हूं, फिर इन बिट्स को ASCII वर्णों में कनवर्ट करें, इसके बाद मैं स्ट्रिंग बिल्डर में वर्ण एकत्र करता हूं और जब मेरे पास उदाहरण के लिए 8 अक्षर हैं तो मैंने उस स्ट्रिंग बिल्डर ऑब्जेक्ट को ऐरे लिस्ट में रखा है। फिर मैं इसे साफ करता हूं और फिर वही करता हूं। हालांकि मैं स्मृति के कारण नया स्ट्रिंग बिल्डर नहीं बना सकता और मैं उस स्ट्रिंग बिल्डर में परिवर्तन नहीं कर सकता क्योंकि ऐरे सूची में भी निर्माता बदलता है।क्लोन कैसे करें() स्ट्रिंगबिल्डर

तो मुझे लगता है कि मुझे उस स्ट्रिंग बिल्डर को क्लोन करना होगा और इसे ऐरे सूची में रखना होगा। स्ट्रिंग बिल्डर के पास केवल एक समस्या नहीं है क्लोन()। तो मेरे विकल्प क्या हैं?

शायद कोई कुछ विचार दे सकता है कि प्रदर्शन और स्मृति के बारे में विचार करने के लिए यह साफ तरीका क्या है।

ArrayList वर्ण = नया ArrayList(); int काउंटर = 0;

StringBuilder sb = new StringBuilder(blockSize-1); 

while (mbb.hasRemaining()) { 

char charAscii = (char)mbb.get(); 


    counter++; 
    charCounter++; 

    if (counter == blockSize){ 

     sb.append(charAscii); 
     characters.add(sb);//sb.toString() 
     sb.delete(0, sb.length()); 
     counter = 0; 

    }else{ 

     sb.append(charAscii); 

    } 

if(!mbb.hasRemaining()){ 
    characters.add(sb); 
} 



} 
fc.close(); 
return characters; 
+2

"मैं नया स्ट्रिंग बिल्डर स्मृति की वजह से नहीं बना सकते हैं" यह आपकी मदद करता है? – DNA

+2

'नया स्ट्रिंगबिल्डर (oldbuilder.toString()) स्ट्रिंगबिल्डर की प्रतिलिपि बनाने का सबसे आसान तरीका है। आपने वास्तव में समझाया नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं, इसलिए आप स्ट्रिंगबिल्डर से स्ट्रिंग को बस स्टोर करने में सक्षम हो सकते हैं। – DNA

+0

याप समझ गया कि यह वैसे भी मदद नहीं करेगा। इसलिए मैं इस पात्रों के विकल्प विकल्पों में से बाहर हूं। नया (नया स्ट्रिंगबिल्डर (एसबी)); जावा आउटऑफमेमरी अपवाद देता है – Streetboy

उत्तर

14

आप एक नया StringBuilder बनाने के लिए स्मृति की जरूरत नहीं है, तो आप एक नया StringBuilder बनाने के लिए स्मृति की जरूरत नहीं है, और क्लोनिंग कि परिवर्तन नहीं होगा। StringBuilder कॉपी करने का एकमात्र असली तरीका new StringBuilder(myBuilder) है, या समकक्ष कुछ है।

यदि आपको OutOfMemoryException मिल रहा है, तो आपको या तो स्मृति प्राप्त करने या स्मृति खपत को कम करने के लिए किसी अन्य तरीके की आवश्यकता होगी।

1

आप द्वारा StringBuilder वस्तु को स्पष्ट कर सकते हैं:

1.

sb.delete(0, sb.length()) 

2.

sb = null; 
sb = new StringBuilder(); 

प्रदर्शन के लिए, 1. बेहतर विकल्प है। लेकिन आप वैसे भी इसे क्लोन नहीं कर सकते हैं। तो एक क्लोन StringBuilder स्मृति का एक समान राशि का उपयोग करेगा, कैसे होगा - क्लोन के बारे में अधिक जानकारी के लिए देख

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