我什么时候应该使用Java的StringWriter?

什么是Java StringWriter ,何时应该使用它?

我已阅读文档并查看此处 ,但我不明白何时应该使用它。

它是一个专门的Writer ,它将字符写入StringBuffer ,然后我们使用类似toString()方法来获取字符串结果。

当使用StringWriter ,您希望写入字符串,但API需要WriterStream 。 它是一个妥协,你只有在必须时才使用StringWriter ,因为StringBuffer / StringBuilder写字符更自然,更容易,这应该是你的首选。

以下是使用StringWriter两个典型案例

1.将堆栈跟踪转换为String ,以便我们可以轻松记录。

 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.另一种情况是当我们需要从InputStream复制到Writer上的字符时,以便我们以后可以使用Apache commons IOUtils #copy获取String

 StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter String result = writer.toString(); 

它用于构造字符串char-by-charstring-by-string

它与StringBuilder类似,但在引擎盖下使用StringBuffer 。 当您使用需要流或编写器的API时,这是首选。 如果您没有此要求,则使用StringBuilder应该更有效(由于StringBuilder的同步开销)。

当然,只有当你意识到字符串连接时才有意义(例如。

 String s = "abc"+"def"; //... (especially when spread throughout a loop)` 

是一个缓慢的操作(见这里 )。

小的例如

 StringWriter writer = new StringWriter(); writer.write('t'); writer.write("his awesome"); String result = writer.toString(); System.out.println(result); //outputs this is awesome 

一个更好的例子:

 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);