2012-05-30 37 views
6

有人可以解釋我OutputStreamOutputWriter之間的區別嗎?我應該使用哪些類?OutputStream和OutputWriter有什麼區別?

+4

沒有得到這個關閉票。這是一個真正的問題,並帶有真實的答案。 –

+1

我的近距離投票是因爲真正的答案是在Javadoc,OP應該首先看,所以這個問題沒有永久的價值。 – EJP

回答

11

流在字節級別工作,它們可以讀取(InputStream)和寫入(OutputStream)字節或字節列表到流中。

Reader/Writers在流的頂部添加字符的概念。由於字符只能通過使用編碼轉換爲字節,因此讀者和編寫者擁有編碼組件(由於Java具有默認的編碼屬性,因此可以自動設置該組件)。讀取的字符(Reader)或寫入的(Writer)通過編碼自動轉換爲字節併發送到流。

7

的OutputStream類由字節寫入目標字節其中作爲作家類寫入目標逐個字符

+3

值得注意的是,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)。 –

0

OutputStream使用裸字節,而Writer使用編碼 charaters。

+1

實際上'Writer'使用UTF-16 [Code Units](http://unicode.org/glossary/#code_unit),而不是[Encoded Characters](http://unicode.org/glossary/#encoded_character) –

2

OutputStream是一個可以寫入信息的流。這是相當普遍的,所以有專門的OutputStream用於寫文件等特殊用途。一個流只能寫入字節數組。

Writer s提供了更大的靈活性,可以在考慮特殊編碼的同時編寫字符甚至字符串。

要採取哪一個是真正的問題,你想寫什麼。如果您已經有字節,則可以直接使用該流。如果你有字符或字符串,你可能需要自己將它們轉換爲字節,如果你想將它們寫入流中,或者你需要使用Writer來爲你做這項工作。

+0

您不能將字符寫入流中,它們必須先編碼爲字節,這在Java中意味着它們將始終轉到「OutputStream」,例如通過「OutputStreamWriter」。 –

+0

我沒有說你可以寫字符到一個流 - 我說你可以使用'Writer'來寫一個字符串到一個流,這是你不能做的時候只使用一個流。編輯我的答案,使其更清楚。 –

+0

一個字符串是一個字符序列(或者在Java中是一個代碼單元序列),所以不能,你不能寫一個字符串到一個流中,它們必須先被編碼爲字節。 –

0

Reader/Writer類層次結構是面向字符的,Input Stream/Output Stream類層次結構是面向字節的。 基本上有兩種類型的streams.Byte流用於處理字節流和字符流以處理字符流。在字節流中,輸入/輸出流是層次結構頂部的抽象類,而writer/reader字符流層次結構頂部的抽象類。

More details here

乾杯!