我什么时候应该使用Java的StringWriter?
什么是Java StringWriter
,何时应该使用它?
我已阅读文档并查看此处 ,但我不明白何时应该使用它。
它是一个专门的Writer
,它将字符写入StringBuffer
,然后我们使用类似toString()
方法来获取字符串结果。
当使用StringWriter
,您希望写入字符串,但API需要Writer
或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.另一种情况是当我们需要从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();
它用于构造字符串char-by-char
或string-by-string
。
它与StringBuilder
类似,但在引擎盖下使用StringBuffer
。 当您使用需要流或编写器的API时,这是首选。 如果您没有此要求,则使用StringBuilder
应该更有效(由于StringBuilder
的同步开销)。
当然,只有当你意识到字符串连接时才有意义(例如。
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);