2012-03-01 17 views
5

StringBuilder'i nasıl klonlayabileceğimin bazı yolları var mı? Dosyaları bitlerle okuyorum ve sonra bu bitleri ASCII karakterlerine dönüştürüyorum. Ardından, String oluşturucuya chars topladım ve örneğin 8 karaktere sahip olduğumda, bu String Builder nesnesini Dizi Listesine yerleştirdim. Sonra temizlerim ve tekrar aynısını yaparım. Ancak, bellek nedeniyle yeni dize oluşturucu oluşturamıyorum ve bu Dize oluşturucuda değişiklik yapamıyorum çünkü Array Listesinde bu oluşturucu değişiyor.Nasıl klonlanır() StringBuilder

Sanırım bu String Builder'ı klonlamam ve Array List'e koymam gerekiyor. Sadece bir sorun var String Builder'da clone yok(). Peki benim alternatiflerim nedir? Belki birileri, performans ve bellek ile ilgili olarak bunu yapmak için düzgün bir yol olan bazı fikirler verebilirdi.

ArrayList characters = new ArrayList(); int sayaç = 0; Yeni StringBuilder oluşturmak için bellek yoksa

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

"i nedeniyle belleğin yeni dize oluşturucu oluşturamazsınız" bakın Bu size yardımcı olur mu? – DNA

+2

'yeni StringBuilder (oldbuilder.toString())' bir StringBuilder'ı kopyalamanın en kolay yoludur. Gerçekte neyi başarmaya çalıştığınızı açıklamıyorsunuz, bu yüzden String'i StringBuilder'dan saklayabiliyordunuz. Yapım, – DNA

+0

Yaptı ki, bunun bir işe yaramayacağını anladı. Bu yüzden bu karakterlerin dışında bir seçenekim var.add (yeni StringBuilder (sb)); java outOffMemory istisnasını verir – Streetboy

cevap

14

, o zaman yeni bir StringBuilder oluşturmak için hafıza yok, ve klonlama bunu değiştirmek olmaz. StringBuilder'u kopyalamanın tek gerçek yolu new StringBuilder(myBuilder) veya eşdeğer bir değerdir.

OutOfMemoryException alıyorsanız, daha fazla bellek almanız veya bellek tüketimini azaltmak için başka bir yol bulmanız gerekir.

1

Sen tarafından StringBuilder nesneyi temizleyebilirsiniz:

2. performans için

sb = null; 
sb = new StringBuilder(); 

1.

sb.delete(0, sb.length()) 
, 1. iyi bir seçenektir. Ama yine de klonlayamazsın. Bir klonlanmış StringBuilder bellek benzer bir miktarda kullanır, bu nedenle nasıl olur - klon hakkında daha fazla bilgi için

İlgili konular