如何克隆()StringBuilder

时间:2012-03-01 19:13:08

标签: java memory netbeans arraylist stringbuilder

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

所以我认为我必须克隆String Builder并将其放入Array List。只有一个问题String Builder没有clone()。那么我的替代方案是什么?

考虑到性能和记忆,也许有人可以提供一些简洁的方法。

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 个答案:

答案 0 :(得分:15)

如果您没有内存来创建新的StringBuilder,那么您没有内存来创建新的StringBuilder,并且克隆不会改变它。复制StringBuilder的唯一真正方法是new StringBuilder(myBuilder),或类似的东西。

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

答案 1 :(得分:1)

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

1

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

2

sb = null;
sb = new StringBuilder();

对于表现,1。是更好的选择。但无论如何你无法克隆它。有关克隆的详细信息,请参阅