2012-03-01 3 views
5

Esistono modi per clonare StringBuilder? Sto leggendo i file per bit e poi li converto in caratteri ASCII, dopo di che raccolgo caratteri nel builder String e quando ho per esempio 8 caratteri, metto l'oggetto String Builder nella lista di array. Quindi lo pulisco e di nuovo faccio lo stesso. Tuttavia, non posso creare un nuovo generatore di stringhe a causa della memoria e non posso apportare modifiche a quel generatore di stringhe perché nella lista di array anche quel costruttore cambia.Come clonare() StringBuilder

Quindi penso di dover clonare quel generatore di stringhe e metterlo nella lista di array. C'è solo un problema. String Builder non ha clone(). Quindi quali sono le mie alternative?

Forse qualcuno potrebbe dare qualche idea su quale sia il modo migliore per farlo considerando le prestazioni e la memoria.

ArrayList characters = new ArrayList(); contatore 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

"Non posso creare un nuovo costruttore stringa a causa della memoria" - una StringBuilder clonato utilizzerà una quantità simile di memoria, quindi come sarebbe questo ti aiuta? – DNA

+2

'new StringBuilder (oldbuilder.toString())' è il modo più semplice per copiare uno StringBuilder. Non hai realmente spiegato cosa stai cercando di ottenere, quindi potresti essere in grado di archiviare semplicemente String da StringBuilder. – DNA

+0

Yap ha capito che non sarà di aiuto comunque. Quindi sono fuori dalle opzioni per questo characters.add (new StringBuilder (sb)); fornisce l'eccezione java outOffMemory – Streetboy

risposta

14

Se non si ha la memoria per creare un nuovo StringBuilder, allora non hanno la memoria per creare un nuovo StringBuilder, e la clonazione non sarebbe cambiare la situazione. L'unico vero modo per copiare un StringBuilder è new StringBuilder(myBuilder) o qualcosa di equivalente.

Se si ottiene OutOfMemoryException, è necessario ottenere più memoria o trovare un altro modo per ridurre il consumo di memoria.

1

è possibile cancellare StringBuilder oggetto:

1.

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

2.

sb = null; 
sb = new StringBuilder(); 

Per prestazioni, 1. è l'opzione migliore. Ma non puoi clonarlo comunque. Per maggiori informazioni sulla clone vedere