What is a Java StringWriter, and when should I use it?
I have read the documentation and looked here, but I do not understand when I should use it.
What is a Java StringWriter, and when should I use it?
I have read the documentation and looked here, but I do not understand when I should use it.
On
It is used to construct a string char-by-char or string-by-string.
It is similar to StringBuilder but uses a StringBuffer under the hood. This is preferable when you are working with an API that requires a stream or writer. If you don't have this requirement it should be more efficient to use a StringBuilder (due to the synchronisation overhead of StringBuffer).
Of course this only makes sense if you realise that string concatenation (eg.
String s = "abc"+"def"; //... (especially when spread throughout a loop)`
is a slow operation (see here).
small e.g.
StringWriter writer = new StringWriter();
writer.write('t');
writer.write("his awesome");
String result = writer.toString();
System.out.println(result); //outputs this is awesome
A better example:
String[] strings = /* some array of strings*/
StringWriter writer = new StringWriter();
for(String s : strings){
writer.write(s);
}
String result = writer.toString();
System.out.println(result);
It is a specialized
Writerthat writes characters to aStringBuffer, and then we use method liketoString()to get the string result.When
StringWriteris used is that you want to write to a string, but the API is expecting aWriteror aStream. It is a compromised, you useStringWriteronly when you have to, sinceStringBuffer/StringBuilderto write characters is much more natural and easier,which should be your first choice.Here is two of a typical good case to use
StringWriter1.Converts the stack trace into
String, so that we can log it easily.2.Another case will be when we need to copy from an
InputStreamto chars on aWriterso that we can getStringlater, using Apache commons IOUtils#copy :