我有什么方法可以克隆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;
答案 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。是更好的选择。但无论如何你无法克隆它。有关克隆的详细信息,请参阅