我不明白使用StringWriter
代替StringBuffer
。请帮我理解。为什么使用StringWriter而不是StringBuffer?
-5
A
回答
3
这在很大程度上是API的问题。
StringWriter
实现了Writer
API;即它可以用作捕获写入基于字符的输出流的字符的“信宿”。StringBuilder
实现了CharSequence
API。这比Writer
更普遍,因为它也支持访问已经写入的字符。此外,StringBuilder
有在任意位置插入和删除的方法。
还应该注意的是Writer
和StringBuilder
实施Appendable
API,这意味着,对于一些使用情况,您可以编写能够接受一个StringWriter
或捕获文本StringBuilder
一个方法。
那么......你会用哪个?
如果您正在调用现有的库方法,则使用哪种方法与该方法的API兼容。如果两者兼容,则可以使用。
如果要设计的API方法,你应该使用相应的超类/接口作为参数(或结果)的一种类型的而不是硬布线
StringWriter
或StringBuilder
。这会让你的方法更一般/更可重用。可能是最一般的是Appendable
......但取决于你的方法需要做什么与角色接收器,并预测客户端的要求。
相关问题
- 1. 为什么要在Dart中使用StringBuffer而不是Iterable.join?
- 2. 为什么使用classmethod而不是staticmethod?
- 3. 为什么使用iconv_strpos而不是strpos?
- 4. 为什么使用registerDefaults:而不是setValue:forKey:?
- 5. 为什么使用TagBuilder而不是StringBuilder?
- 6. 为什么,而不是使用回调
- 7. 为什么使用结构,而不是
- 8. 为什么使用s:Line而不是mx:HRule?
- 9. 为什么使用ImageIcon而不是Image?
- 10. 为什么使用SQLiteOpenHelper而不是SQLiteDatabase?
- 11. 为什么使用MapFragment而不是SupportMapFragment?
- 12. 为什么使用FloatBuffer而不是float []?
- 13. 为什么使用追加()而不是+
- 14. 为什么使用Number.parseInt而不是parseInt()?
- 15. 为什么使用JLE而不是JL?
- 16. 为什么使用isinstance()而不是type()?
- 17. 为什么使用NoSQL而不是RDBMS?
- 18. 为什么使用uImage而不是zImage
- 19. 为什么使用HTML而不是HAML?
- 20. 为什么使用leal而不是incq?
- 21. 为什么使用TCPDF而不是mpdf
- 22. 为什么使用DataSource而不是XADataSource?
- 23. 为什么使用'='而不是':='?
- 24. 为什么使用char []而不是String?
- 25. 为什么StringBuffer不会更改?
- 26. 为什么DataContractSerializer要截断StringWriter?
- 27. 为什么StringBuffer允许StringBuffer作为其构造函数的参数,即使StringBuffer没有StringBuffer构造函数?
- 28. “StringBuffer是同步的(或线程安全的)并且StringBuilder不是”,为什么这会使StringBuffer方法变慢?
- 29. 为什么=而不是:?
- 30. bufferedreader - 读入stringbuffer而不是字符串
请参阅本http://stackoverflow.com/questions/27221292/when-should-i-use-javas-stringwriter –
也http://www.coderanch.com/t/380184/java/java/wat-diff-stringbuffer-stringwriter – Roshan
如果你有一个你想调用的接受'Writer'的API,你想在内存中创建一个字符串,你会怎么做? –