我不明白使用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,你想在內存中創建一個字符串,你會怎麼做? –