2012-03-01 29 views
5

¿Hay alguna forma de clonar StringBuilder? Estoy leyendo archivos por bits y luego convierto estos bits en caracteres ASCII después de que recojo los caracteres en el generador de cadenas y cuando tengo, por ejemplo, 8 caracteres, pongo el objeto del generador de cadenas en la lista de arreglos. Luego lo limpio y nuevamente hago lo mismo. Sin embargo, no puedo crear un generador de cadenas nuevo debido a la memoria y no puedo hacer cambios en ese constructor de cadenas porque en la lista de arreglos también cambia ese constructor.Cómo clonar() StringBuilder

Así que creo que tengo que clonar ese String Builder y ponerlo en la lista de arreglos. Solo hay un problema. El Generador de cadenas no tiene clon(). Entonces, ¿cuáles son mis alternativas?

Tal vez alguien podría dar algunas ideas de lo que es una buena manera de hacerlo teniendo en cuenta el rendimiento y la memoria.

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

"No puedo crear nuevo generador de cadenas debido a la memoria" - un StringBuilder clonado utilizará una cantidad similar de memoria, así que ¿cómo lo haría esto te ayuda? – DNA

+2

'new StringBuilder (oldbuilder.toString())' es la forma más sencilla de copiar un StringBuilder. En realidad, no ha explicado qué está tratando de lograr, por lo que puede almacenar el String de StringBuilder en su lugar. – DNA

+0

Yap entendió que no ayudará de todos modos. Así que estoy sin opciones debido a este characters.add (nuevo StringBuilder (sb)); da excepción java outOffMemory – Streetboy

Respuesta

14

Si no tiene la memoria para crear un nuevo StringBuilder, entonces usted no tiene la memoria para crear un nuevo StringBuilder, y la clonación no cambiaría eso. La única manera real de copiar un StringBuilder es new StringBuilder(myBuilder), o algo equivalente.

Si obtiene OutOfMemoryException, necesitará obtener más memoria o encontrar alguna otra forma de reducir el consumo de memoria.

1

puede borrar StringBuilder objeto por:

1.

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

2.

sb = null; 
sb = new StringBuilder(); 

Para obtener un rendimiento, 1. es la mejor opción. Pero no puedes clonarlo de todos modos. Para obtener más información sobre clon ver