有人可以解釋我OutputStream
和OutputWriter
之間的區別嗎?我應該使用哪些類?OutputStream和OutputWriter有什麼區別?
回答
流在字節級別工作,它們可以讀取(InputStream)和寫入(OutputStream)字節或字節列表到流中。
Reader/Writers在流的頂部添加字符的概念。由於字符只能通過使用編碼轉換爲字節,因此讀者和編寫者擁有編碼組件(由於Java具有默認的編碼屬性,因此可以自動設置該組件)。讀取的字符(Reader)或寫入的(Writer)通過編碼自動轉換爲字節併發送到流。
的OutputStream類由字節寫入目標字節其中作爲作家類寫入目標逐個字符
值得注意的是,Java中的Character是一個誤稱,因爲它實際上代表了UTF-16 [Code Unit](http://unicode.org/glossary/#code_unit),而不是Unicode [Character](http ://unicode.org/glossary/#character)或[Code Point](http://unicode.org/glossary/#code_point)。 –
OutputStream
使用裸字節,而Writer
使用編碼 charaters。
實際上'Writer'使用UTF-16 [Code Units](http://unicode.org/glossary/#code_unit),而不是[Encoded Characters](http://unicode.org/glossary/#encoded_character) –
OutputStream
是一個可以寫入信息的流。這是相當普遍的,所以有專門的OutputStream
用於寫文件等特殊用途。一個流只能寫入字節數組。
Writer
s提供了更大的靈活性,可以在考慮特殊編碼的同時編寫字符甚至字符串。
要採取哪一個是真正的問題,你想寫什麼。如果您已經有字節,則可以直接使用該流。如果你有字符或字符串,你可能需要自己將它們轉換爲字節,如果你想將它們寫入流中,或者你需要使用Writer
來爲你做這項工作。
您不能將字符寫入流中,它們必須先編碼爲字節,這在Java中意味着它們將始終轉到「OutputStream」,例如通過「OutputStreamWriter」。 –
我沒有說你可以寫字符到一個流 - 我說你可以使用'Writer'來寫一個字符串到一個流,這是你不能做的時候只使用一個流。編輯我的答案,使其更清楚。 –
一個字符串是一個字符序列(或者在Java中是一個代碼單元序列),所以不能,你不能寫一個字符串到一個流中,它們必須先被編碼爲字節。 –
Reader/Writer類層次結構是面向字符的,Input Stream/Output Stream類層次結構是面向字節的。 基本上有兩種類型的streams.Byte流用於處理字節流和字符流以處理字符流。在字節流中,輸入/輸出流是層次結構頂部的抽象類,而writer/reader字符流層次結構頂部的抽象類。
乾杯!
- 1. java ObjectOutputStream和OutputStream有什麼區別?
- 2. 直接關閉Input/OutputStream和關閉Socket有什麼區別?
- 3. 有什麼的PrintWriter和OutputStream
- 4. 有什麼區別`和$(Bash中有什麼區別?
- 5. 有什麼區別? :和||
- 6. &&和||有什麼區別?
- 7. 「/」和「/ *」有什麼區別?
- 8. 有什麼區別:。!和:r!?
- 9. ==和===有什麼區別?
- 10. Appender和〜有什麼區別?
- 11. $ @和$ *有什麼區別?
- 12. is和=有什麼區別?
- 13. #.00和#。##有什麼區別?
- 14. `==`和`is`有什麼區別?
- 15. '=='和'==='有什麼區別?
- 16. /和/#/有什麼區別?
- 17. | 0和~~有什麼區別?
- 18. `&`和`ref`有什麼區別?
- 19. ==和===有什麼區別?
- 20. ==和===有什麼區別?
- 21. `{}`和`[]`有什麼區別?
- 22. JavaScript和=== ===有什麼區別?
- 23. difftime和' - '有什麼區別?
- 24. =和==有什麼區別?
- 25. xtype和別名有什麼區別?
- 26. Mixpanel:識別()和people.identify()有什麼區別?
- 27. 有什麼區別
- 28. 有什麼區別
- 29. 有什麼區別?
- 30. 有什麼區別?
沒有得到這個關閉票。這是一個真正的問題,並帶有真實的答案。 –
我的近距離投票是因爲真正的答案是在Javadoc,OP應該首先看,所以這個問題沒有永久的價值。 – EJP