什么是Java的StringWriter
,何时应该使用它?
我已经阅读了文档并查看了这里,但我不明白在何时应该使用它。
什么是Java的StringWriter
,何时应该使用它?
我已经阅读了文档并查看了这里,但我不明白在何时应该使用它。
这是一个专门将字符写入 StringBuffer
的特殊 Writer
,然后我们使用像 toString()
这样的方法来获取字符串结果。
当希望向字符串中写入内容,但 API 需要 Writer
或 Stream
时,可以使用 StringWriter
。这是一种妥协,只有在必须时才使用 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();
StringWriter
。此外,我认为我们不应该把它称为类似于StringBuffer
/StringBuilder
,它更像是一个适配器,处理流/写入器的情况,只有在没有其他选择时才应该使用它。 - JaskeyLamt
是什么?这段代码无法编译。 - undefined它用于构建一个char-by-char
或string-by-string
的字符串。
它类似于StringBuilder
,但在底层使用StringBuffer
。当你使用需要流或写入器(stream or writer)的API时,这是首选。如果你没有此要求,则使用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);