简体   繁体   English

如何克隆()StringBuilder

[英]How to clone() StringBuilder

Is there some ways how I could clone StringBuilder ? 有什么办法可以克隆StringBuilder吗? I am reading files by bits then convert these bits to ASCII chars after that I collect chars into String builder and when I have for example 8 chars I put that String Builder object into Array List. 我正在按位读取文件,然后将这些位转换为ASCII字符,之后我将字符集收集到字符串构建器中,当我有8个字符时,我将字符串生成器对象放入数组列表中。 Then I clean it and again do the same. 然后我清理它并再次做同样的事情。 However I can't create new string builder because of memory and I can't do changes to that String builder because in Array List also that builder changes. 但是由于内存而无法创建新的字符串构建器,因此无法对该“字符串”构建器进行更改,因为在“阵列列表”中也会更改该构建器。

So I think I have to clone that String Builder and put it into Array List. 所以我想我必须克隆String Builder并将其放入Array List。 There is just one problem String Builder don't have clone(). 只有一个问题String Builder没有clone()。 So what is my alternatives ? 那么我的替代方案是什么?

Maybe someone could give some ideas what is neat way to do this considering about performance and memory. 考虑到性能和内存,也许有人可以提供一些简洁的方法来做这件事。

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

If you don't have the memory to create a new StringBuilder , then you don't have the memory to create a new StringBuilder , and cloning wouldn't change that. 如果您没有内存来创建新的StringBuilder ,那么您没有内存来创建新的StringBuilder ,并且克隆不会改变它。 The only real way to copy a StringBuilder is new StringBuilder(myBuilder) , or something equivalent. 复制StringBuilder的唯一真正方法是使用new StringBuilder(myBuilder)或类似的东西。

If you're getting OutOfMemoryException , you'll need to either get more memory, or find some other way to reduce memory consumption. 如果你得到OutOfMemoryException ,你需要获得更多内存,或者找到一些其他方法来减少内存消耗。

You can clear StringBuilder object by: 您可以通过以下方式清除StringBuilder对象:

1. 1。

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

2. 2。

sb = null;
sb = new StringBuilder();

For performance, 1. is the better option. 对于性能,1.是更好的选择。 But you cannot clone it anyway. 但无论如何你无法克隆它。 For more info about clone see 有关克隆的详细信息,请参阅

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM