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 a specialized Writer that writes characters to a StringBuffer, and then we use method like toString() to get the string result.
When StringWriter is used is that you want to write to a string, but the API is expecting a Writer or a Stream. It is a compromised, you use StringWriter only when you have to, since StringBuffer/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.
StringWriter sw = new StringWriter();//create a StringWriter
PrintWriter pw = new PrintWriter(sw);//create a PrintWriter using this string writer instance
t.printStackTrace(pw);//print the stack trace to the print writer(it wraps the string writer sw)
String s=sw.toString(); // we can now have the stack trace as a string
2.Another case will be when we need to copy from an InputStream to chars on a Writer so that we can get String later, using Apache commons IOUtils#copy :
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter
String result = writer.toString();
It is used to construct a string
char-by-charorstring-by-string.It is similar to
StringBuilderbut uses aStringBufferunder 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 aStringBuilder(due to the synchronisation overhead ofStringBuffer).Of course this only makes sense if you realise that string concatenation (eg.
is a slow operation (see here).
small e.g.
A better example: