什么是Java StringWriter
,我应该何时使用它?
我已阅读文档并查看here,但我不明白何时应该使用它。
答案 0 :(得分:12)
这是一个专门的Writer
,它将字符写入StringBuffer
,然后我们使用toString()
之类的方法来获取字符串结果。
使用StringWriter
时,您要写入字符串,但API需要Writer
或Stream
。这是一种妥协,只有在必要时才使用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
:< / p>
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter
String result = writer.toString();
答案 1 :(得分:2)
它用于构造字符串char-by-char
或string-by-string
。
它与StringBuilder
类似,但在引擎盖下使用了StringBuffer
。当您使用需要流或编写器的API时,这是首选。如果您没有此要求,则使用StringBuilder
应该更有效(由于StringBuffer
的同步开销)。
当然,只有你意识到字符串连接(例如
)才有意义String s = "abc"+"def"; //... (especially when spread throughout a loop)`
操作缓慢(参见here)。
小例如。
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);