2012-03-01 5 views
5

어떻게하면 StringBuilder를 복제 할 수 있습니까? 문자열 빌더에 문자를 수집 한 후이 비트를 ASCII 문자로 변환하여 파일을 읽었습니다. 예를 들어 8자를 가질 때 문자열 빌더 객체를 배열 목록에 넣었습니다. 그 다음 나는 그것을 깨끗하게하고, 다시 똑같이한다. 그러나 메모리 때문에 새로운 문자열 작성기를 작성할 수 없으며 배열 목록에서 빌더가 변경되므로 해당 문자열 작성기를 변경할 수 없습니다.clone() StringBuilder

그래서 String Builder를 복제하여 Array List에 넣어야한다고 생각합니다. String Builder에는 clone()이 하나만있는 문제가 있습니다. 그럼 내 대안은 무엇입니까?

어쩌면 누군가가 성능과 메모리에 대해 고려해 보았을 때 깔끔한 방법이 무엇인지 알 수있었습니다.

ArrayList characters = new ArrayList(); int counter = 0; 새 StringBuilder을 만들 수있는 메모리가없는 경우

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

Yap은 어쨌든 도움이되지 않을 것이라고 이해했습니다. 그래서 난이 옵션으로 인해 character.add (new StringBuilder (sb)); 자바 outOffMemory 예외를 준다. – Streetboy

답변

14

는, 당신은 새로운 StringBuilder을 만들 수있는 메모리를 가지고 있지 않으며, 복제는 변경하지 않을 것입니다. StringBuilder을 복사하는 유일한 방법은 new StringBuilder(myBuilder) 또는 이와 동등한 것입니다.

OutOfMemoryException이 표시되면 더 많은 메모리를 가져 오거나 메모리 소비를 줄이려면 다른 방법을 찾아야합니다.

1

다음과 같은 방법으로 StringBuilder 객체를 취소 할 수 있습니다

2. 성능

sb = null; 
sb = new StringBuilder(); 

1.

sb.delete(0, sb.length()) 
, 1. 더 나은 옵션입니다. 하지만 어쨌든 그것을 복제 할 수는 없습니다. 복제의 StringBuilder의 메모리가 비슷한 양을 사용합니다, 그래서 어떻게 것 - 복제에 대한 자세한 정보를 원하시면