java stringwriter vs stringbuilder vs stringbuffer

StringWriter

java.lang.Object 
  |
  +--java.io.Writer 
        |
        +--java.io.StringWriter

출력을 캐릭터 라인 버퍼에 모으는 문자 스트림입니다. 이 캐릭터 라인 버퍼를 사용해 캐릭터 라인을 구축합니다. StringWriter 를 닫아도, 무슨 영향도 없습니다. IOException 를 생성하지 않고 스트림이 닫혀진 후에, 이 클래스의 메소드를 호출할 수가 있습니다.

참고 : http://xrath.com/javase/ko/6/docs/ko/api/java/io/StringWriter.html



-----


StringBuilder

java.lang.Object 
  상위를 확장 java.lang.StringBuilder


문자의 가변 순서입니다. 이 클래스는,StringBuffer 와 호환성이 있는 API (을)를 제공합니다만, 동기화는 보증되지 않습니다. 이 클래스는, 캐릭터 라인 버퍼가 단일의 thread (일반적인 케이스)에 의해 사용되고 있었을 경우의 StringBuffer 의 간단한 대체로서 사용되도록(듯이) 설계되고 있습니다. 이 클래스는, 대부분의 구현으로 고속으로 실행되므로, 가능한 경우는,StringBuffer 보다 우선해 사용하는 것을 추천합니다.
StringBuilder 의 기본적인 오퍼레이션에는,append 메소드 및 insert 메소드가 있어, 이러한 메소드는 어떤 종류의 데이터도 받을 수가 있도록(듯이) overload 되고 있습니다. 메소드는 각각 주어진 데이터를 효율적으로 캐릭터 라인으로 변환해, 캐릭터 라인중의 문자를 캐릭터 라인 빌더에 추가 또는 삽입합니다. append 메소드는 항상, 빌더의 말미에게 줄 수 있었던 문자를 추가해,insert 메소드는 지정된 위치에 문자를 추가합니다.
예를 들어,z 를, 현재 「start」를 포함한 캐릭터 라인 빌더객체라고 보는 경우,z.append("le") 메소드 호출은 캐릭터 라인 빌더의 내용이 「startle」가 되도록(듯이) 변경하는데 대해,z.insert(4, "le") 라고 하는 메소드 호출은 캐릭터 라인 빌더의 내용이 「starlet」가 되도록(듯이) 작용합니다.
일반적으로, sb 가 StringBuilder 의 인스턴스를 참조하고 있는 경우,sb.append(x) (은)는 sb.insert(sb.length(),  x) 와 같은 결과가 됩니다. 각 캐릭터 라인 빌더에는 용량이 있습니다. 캐릭터 라인 빌더에 포함되는 캐릭터 라인의 길이가 용량을 초과하지 않는 한, 새로운 내부 버퍼를 할당할 필요는 없습니다. 내부 버퍼가 오버플로우 하는 경우, 자동적으로 용량이 증가합니다.
StringBuilder 의 인스턴스는, 복수의 thread로 사용하기에는 안전하지는 않습니다. 이러한 동기가 필요한 경우는,StringBuffer (을)를 사용하는 것을 추천합니다.

참고 : http://xrath.com/javase/ko/6/docs/ko/api/java/lang/StringBuilder.html

-----

StringBuffer

java.lang.Object 
  상위를 확장 java.lang.StringBuffer

thread 세이프인 가변의 캐릭터 라인. 캐릭터 라인 버퍼는 String (와)과 닮아 있습니다만, 변경할 수 있는 점이 다릅니다. 캐릭터 라인 버퍼에는 항상 캐릭터 라인이 포함되고 있습니다만, 캐릭터 라인의 길이와 내용은 특정의 메소드의 호출에 의해 변경 할 수 있습니다.
캐릭터 라인 버퍼는 복수의 thread에 의해 안전하게 사용할 수가 있습니다. 메소드는 필요에 따라서 동기화 되어 특정의 인스턴스에서의 모든 오퍼레이션 배급량이, 관련이 있는 개개의 thread에 의해 행해지는 메소드의 호출의 순서와 일치하는 연속한 순서로 발생하도록(듯이) 동작합니다.
StringBuffer 의 기본적인 오퍼레이션에는,append 메소드 및 insert 메소드가 있어, 이러한 메소드는 어떤 종류의 데이터도 받을 수가 있도록(듯이) overload 되고 있습니다. 메소드는 각각 주어진 데이터를 효율적으로 캐릭터 라인으로 변환해, 캐릭터 라인중의 문자를 캐릭터 라인 버퍼에 추가 또는 삽입합니다. append 메소드는 항상, 버퍼의 말미에게 줄 수 있었던 문자를 추가해,insert 메소드는 지정된 위치에 문자를 추가합니다.
예를 들어,z 를, 현재 「start」를 포함한 캐릭터 라인 버퍼 객체라고 보는 경우,z.append("le") (은)는 캐릭터 라인 버퍼의 내용이 「startle」가 되도록(듯이) 변경하는데 대해,z.insert(4, "le") 라고 하는 메소드 호출은 캐릭터 라인 버퍼의 내용이 「starlet」가 되도록(듯이) 작용합니다.
일반적으로, sb 가 StringBuffer 의 인스턴스를 참조하고 있는 경우,sb.append(x) (은)는 sb.insert(sb.length(),  x) 와 같은 결과가 됩니다.
처리에 소스 순서가 관련하는 경우 (소스 순서로부터의 추가나 삽입 등), 이 클래스는, 그 처리를 실행하고 있는 캐릭터 라인 버퍼와만 동기화해, 소스와는 동기화하지 않습니다.
각 캐릭터 라인 버퍼에는 용량이 있습니다. 캐릭터 라인 버퍼에 포함되는 캐릭터 라인의 길이가 용량을 초과하지 않는 한, 새로운 내부 버퍼 배열을 할당할 필요는 없습니다. 내부 버퍼가 오버플로우 하는 경우, 자동적으로 용량이 증가합니다. JDK 5 이후, 이 클래스는 단일의 thread StringBuilder 에 의해 사용되도록(듯이) 설계된 등가의 클래스에서 추가되고 있습니다. StringBuilder 클래스는, 이 클래스와 같은 처리를 모두 지원하면서도 고속으로 있어, 동기를 실행하지 않기 때문에, 일반적으로은 이 클래스에 우선해 사용될 필요가 있습니다.
참고 : http://xrath.com/javase/ko/6/docs/ko/api/java/lang/StringBuffer.html

댓글

이 블로그의 인기 게시물

Spring Batch - JobParameters Default Value 만들기

Hsqldb Server 재기동 시 오류