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

Mar*_*son 8 java string stringwriter

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

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

Jas*_*key 19

它是一个专门Writer将字符写入a StringBuffer,然后我们使用方法toString()来获取字符串结果.

何时StringWriter使用是您要写入字符串,但API期望a Writer或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
Run Code Online (Sandbox Code Playgroud)

2.另一种情况是当我们需要从一个InputStream字符复制到一个字符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();
Run Code Online (Sandbox Code Playgroud)


Ros*_*lle 5

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

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

当然,这只有在您意识到字符串连接(例如

String s = "abc"+"def"; //... (especially when spread throughout a loop)` 
Run Code Online (Sandbox Code Playgroud)

是一个缓慢的操作(见这里)。

小如

StringWriter writer = new StringWriter();
writer.write('t');
writer.write("his awesome");
String result = writer.toString();
System.out.println(result); //outputs this is awesome
Run Code Online (Sandbox Code Playgroud)

一个更好的例子:

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);
Run Code Online (Sandbox Code Playgroud)

  • 对于您的情况,我将使用 StringBuffer/StringBuilder 而不是 StringWriter。 (2认同)