Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何克隆()StringBuilder_Java_Memory_Netbeans_Arraylist_Stringbuilder - Fatal编程技术网

Java 如何克隆()StringBuilder

Java 如何克隆()StringBuilder,java,memory,netbeans,arraylist,stringbuilder,Java,Memory,Netbeans,Arraylist,Stringbuilder,有没有办法克隆StringBuilder?我按位读取文件,然后将这些位转换为ASCII字符,然后将字符收集到字符串生成器中,例如,当我有8个字符时,我将字符串生成器对象放入数组列表中。然后我清洗它,然后再做同样的事情。然而,由于内存问题,我无法创建新的字符串生成器,也无法更改该字符串生成器,因为在数组列表中,该生成器也会更改 所以我想我必须克隆这个字符串生成器并将其放入数组列表中。只有一个问题字符串生成器没有克隆()。那么我的选择是什么 考虑到性能和记忆,也许有人能给出一些想法,什么是做这件事的

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

所以我想我必须克隆这个字符串生成器并将其放入数组列表中。只有一个问题字符串生成器没有克隆()。那么我的选择是什么

考虑到性能和记忆,也许有人能给出一些想法,什么是做这件事的好方法

ArrayList characters=新的ArrayList(); int计数器=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;

如果没有内存创建新的
StringBuilder
,则没有内存创建新的
StringBuilder
,克隆也不会改变这一点。复制
StringBuilder
的唯一真正方法是
新建StringBuilder(myBuilder)
,或类似的方法


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

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

一,

二,

就表现而言,1。这是更好的选择。但无论如何你都不能克隆它。有关克隆的更多信息,请参阅


“由于内存问题,我无法创建新的字符串生成器”-克隆的StringBuilder将使用相似的内存量,因此这对您有何帮助?
新建StringBuilder(oldbuilder.toString())
是复制StringBuilder的最简单方法。您还没有实际解释您要实现的目标,因此您可能只需要存储StringBuilder中的字符串即可。Yap知道这不会有任何帮助。所以我没有选择,因为这个字符;给出java OutOfMemory异常注意,这个OutOfMemoryException并不意味着机器内存不足,它意味着JVM已经达到了极限。它可能是机器限制或JVM限制。我建议通过传入例如
-Xmx1024
来确保告诉Java使用足够的内存
sb.delete(0, sb.length()) 
sb = null;
sb = new StringBuilder();