2012-03-01 12 views
5

StringBuilderをどのようにクローンすることができますか?私はビットでファイルを読んでいますし、これらのビットをASCII文字に変換した後、文字列ビルダーに文字を集め、たとえば8文字の文字列ビルダーをArray Listに入れます。それから私はそれをきれいにし、同じことをやり直します。しかし、私はメモリのために新しい文字列ビルダーを作成することはできませんし、配列リストでもBuilderが変更されるため、文字列ビルダーに変更を加えることはできません。clone()StringBuilder

私はその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

は「私が原因でメモリの新しい文字列ビルダを作成することはできません」を参照してください。これはあなたを助ける? – DNA

+2

'new StringBuilder(oldbuilder.toString())'は、StringBuilderをコピーする最も簡単な方法です。実際にあなたが達成しようとしていることを説明していないので、代わりにStringBuilderからStringを格納するだけで済みます。 – DNA

+0

ヤップはとにかく助けにならないと理解しました。だから、私はオプションからこのcharacters.add(新しいStringBuilder(sb)); java outOffMemory例外を返す – Streetboy

答えて

14

新しいStringBuilderを作成するためのメモリを持っていない場合は、新しいStringBuilderを作成するためのメモリを持っていない、およびクローニングはそれを変更しないでしょう。 StringBuilderをコピーする唯一の方法は、new StringBuilder(myBuilder)などです。

OutOfMemoryExceptionを取得している場合は、メモリを増やすか、メモリ消費量を減らすために別の方法を見つける必要があります。

1

次の方法でStringBuilderオブジェクトをクリアすることができます。

2.パフォーマンスのために

sb = null; 
sb = new StringBuilder(); 

1.

sb.delete(0, sb.length()) 
、1は良いオプションです。しかし、とにかくそれを複製することはできません。クローンのStringBuilderは、メモリの同様の量を使用しますので、どのようにでしょう - クローンについての詳細情報については