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.
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
Writer
that writes characters to aStringBuffer
, and then we use method liketoString()
to get the string result.When
StringWriter
is used is that you want to write to a string, but the API is expecting aWriter
or aStream
. It is a compromised, you useStringWriter
only when you have to, sinceStringBuffer
/StringBuilder
to write characters is much more natural and easier,which should be your first choice.Here is two of a typical good case to use
StringWriter
1.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
InputStream
to chars on aWriter
so that we can getString
later, using Apache commons IOUtils#copy :