2010-03-11 64 views
14

今天我得到了這個問題,我認爲我的回答非常糟糕。我說流是一種流動的數據,讀者是一種技術,我們從中讀取的是一種靜態數據。我知道這是一個可怕的答案,所以請用Java中的示例向我提供這兩者之間的明顯區別和定義。Java中的流和讀者之間有什麼區別?

謝謝。

回答

11

正如其他人所說,在具體使用情況略有不同(儘管它們經常可以互換使用)

由於讀者閱讀的人物,他們是更好的,當你正在處理輸入這是文本性質的(或者以字符表示的數據)。我說得更好,因爲讀者(在典型用法的背景下)本質上是流式方法,可以方便地讀取字符輸入。

+1

+1這真的是關鍵,Reader通常由某種類型的InputStream(並非總是 - 請參閱StringReader)支持,並將字節轉換爲16位unicode字符。 – Yishai 2010-03-11 19:56:02

9

流是讀取字節,讀取器是讀取字符。一個字符可能需要一個字節或更多,具體取決於字符集。

+0

一個字符在Java中是至少2個字節,正確嗎? – 2014-01-28 04:20:07

+0

從流中讀取時,通過編碼給出字節和字符之間的映射。對於UTF-8,一個字符可以在1到6個字節之間。 – 2014-01-28 10:07:23

16

InputStream是面向字節的。讀者是面向字符的。

javadocs是你的朋友,解釋不同之處。 ReaderInputStream

+3

不用說RTFM。 – 2010-03-11 19:49:54

+0

什麼是RTFM的擴展? – bragboy 2010-03-11 19:56:11

+3

RTFM ==閱讀指南 – NomeN 2010-03-11 20:07:54

5

流類是面向字節的類,這意味着類的所有InputStream類(緩衝和非緩衝)從流中逐字節讀取數據,所有OutputStream(緩衝和非緩衝)類將數據逐字節寫入流。如果數據量較小或者您正在處理二進制文件(如圖像),則流類很有用。

另一方面,Reader/Writer是基於字符的類。這些類在讀取或寫入流中的一個字符時讀取或寫入。這些類擴展了java.io.Reader(全部字符輸入類)或java.io.Writer(全部字符輸出類)。如果您正在處理文本文件或其他文本流,這些類很有用。這些類別也是BufferedNon-Buffered

相關問題