关于java:How to clone()StringBuilder

How to clone() StringBuilder

有一些方法可以克隆StringBuilder吗? 我正在按位读取文件,然后将这些位转换为ASCII字符,然后将字符收集到String builder中,例如当我有8个char时,我将该String Builder对象放入Array List。 然后我将其清洁,然后再次执行相同操作。 但是,由于内存原因,我无法创建新的字符串生成器,也无法更改该字符串生成器,因为在数组列表中,该生成器也会更改。

因此,我认为我必须克隆该String Builder并将其放入"数组列表"。 字符串生成器没有clone()只是一个问题。 那我有什么选择呢?

也许有人可以提出一些想法,考虑到性能和内存,这是什么好方法。

ArrayList字符=新的ArrayList();
int计数器= 0;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;


如果您没有创建新的StringBuilder的内存,则您没有创建新的StringBuilder的内存,并且克隆也不会改变它。 复制StringBuilder的唯一实际方法是new StringBuilder(myBuilder)或类似的方法。

如果获取的是OutOfMemoryException,则需要获取更多的内存,或者找到其他减少内存消耗的方法。


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

1。

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

2。

1
2
sb = null;
sb = new StringBuilder();

对于性能,1.是更好的选择。 但是您还是无法克隆它。 有关克隆的更多信息,请参见

  • 浅拷贝和深拷贝
  • 克隆