什么是 Java StringWriter
,我应该什么时候使用它?
我已阅读文档并查看here,但我不明白何时应该使用它。
它是一种专门Writer
将字符写入 a 的StringBuffer
方法,然后我们使用 like 方法toString()
获取字符串结果。
何时StringWriter
使用是您想要写入字符串,但 API 需要 aWriter
或 a 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.另一种情况是当我们需要从 a 复制到InputStream
a 上的字符Writer
以便我们 String
以后可以使用Apache commons IOUtils#copy 时:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter
String result = writer.toString();
它用于构造字符串char-by-char
或string-by-string
.
它类似于StringBuilder
但StringBuffer
在引擎盖下使用a。当您使用需要流或写入器的 API 时,这是更可取的。如果您没有此要求,则使用 a 应该更有效StringBuilder
(由于 的同步开销StringBuffer
)。
当然,这只有在您意识到字符串连接时才有意义(例如。
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);