我什么时候应该使用Java的StringWriter?[已关闭]

2022-09-04 06:00:25

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

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


答案 1

它是一个专门的,它将字符写入一个,然后我们使用like方法来获得字符串结果。WriterStringBuffertoString()

何时使用是您想要写入字符串,但 API 期望 a 或 .这是一个妥协,你只在必要时使用,因为/写字符更自然,更容易,这应该是你的首选。StringWriterWriterStreamStringWriterStringBufferStringBuilder

这里有两个典型的好案例来使用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 复制到 a 上的字符时,以便我们可以稍后使用 Apache commons IOUtils#copyInputStreamWriterString

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

答案 2

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

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

当然,这只有在您意识到字符串串联时才有意义(例如。

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