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

时间:2014-12-01 03:31:33

标签: java string stringwriter

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

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

2 个答案:

答案 0 :(得分:12)

这是一个专门的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:< / p>

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

答案 1 :(得分:2)

它用于构造字符串char-by-charstring-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);