如何克隆() StringBuilder

有没有办法克隆StringBuilder?我正在按位读取文件,然后将这些位转换为ASCII字符,然后我将字符收集到字符串生成器中,例如当我有8个字符时,我将该字符串生成器对象放入数组列表中。然后我清洁它,然后再次做同样的事情。但是,由于内存的原因,我无法创建新的字符串生成器,并且我无法对该字符串生成器进行更改,因为在数组列表中,该生成器也会更改。

所以我认为我必须克隆那个字符串生成器并将其放入数组列表中。只有一个问题 String Builder 没有 clone()。那么我的替代方案是什么?

也许有人可以给出一些想法,考虑到性能和内存,什么是做到这一点的巧妙方法。

数组列表字符 = 新的数组列表();整型计数器 = 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;

答案 1

如果您没有内存来创建新的 ,那么您就没有内存来创建新的 ,克隆不会改变这一点。复制 的唯一真正方法是 ,或等效的东西。StringBuilderStringBuilderStringBuildernew StringBuilder(myBuilder)

如果你得到 ,你需要获得更多的内存,或者找到一些其他方法来减少内存消耗。OutOfMemoryException


答案 2

您可以通过以下方式清除对象:StringBuilder

1.

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

2.

sb = null;
sb = new StringBuilder();

对于性能,1.是更好的选择。但无论如何你都不能克隆它。有关克隆的详细信息,请参阅