今天我得到了這個問題,我認爲我的回答非常糟糕。我說流是一種流動的數據,讀者是一種技術,我們從中讀取的是一種靜態數據。我知道這是一個可怕的答案,所以請用Java中的示例向我提供這兩者之間的明顯區別和定義。Java中的流和讀者之間有什麼區別?
謝謝。
今天我得到了這個問題,我認爲我的回答非常糟糕。我說流是一種流動的數據,讀者是一種技術,我們從中讀取的是一種靜態數據。我知道這是一個可怕的答案,所以請用Java中的示例向我提供這兩者之間的明顯區別和定義。Java中的流和讀者之間有什麼區別?
謝謝。
正如其他人所說,在具體使用情況略有不同(儘管它們經常可以互換使用)
由於讀者閱讀的人物,他們是更好的,當你正在處理輸入這是文本性質的(或者以字符表示的數據)。我說得更好,因爲讀者(在典型用法的背景下)本質上是流式方法,可以方便地讀取字符輸入。
流是讀取字節,讀取器是讀取字符。一個字符可能需要一個字節或更多,具體取決於字符集。
一個字符在Java中是至少2個字節,正確嗎? – 2014-01-28 04:20:07
從流中讀取時,通過編碼給出字節和字符之間的映射。對於UTF-8,一個字符可以在1到6個字節之間。 – 2014-01-28 10:07:23
InputStream是面向字節的。讀者是面向字符的。
javadocs是你的朋友,解釋不同之處。 Reader,InputStream
流類是面向字節的類,這意味着類的所有InputStream
類(緩衝和非緩衝)從流中逐字節讀取數據,所有OutputStream
(緩衝和非緩衝)類將數據逐字節寫入流。如果數據量較小或者您正在處理二進制文件(如圖像),則流類很有用。
另一方面,Reader/Writer
是基於字符的類。這些類在讀取或寫入流中的一個字符時讀取或寫入。這些類擴展了java.io.Reader
(全部字符輸入類)或java.io.Writer
(全部字符輸出類)。如果您正在處理文本文件或其他文本流,這些類很有用。這些類別也是Buffered
和Non-Buffered
。
+1這真的是關鍵,Reader通常由某種類型的InputStream(並非總是 - 請參閱StringReader)支持,並將字節轉換爲16位unicode字符。 – Yishai 2010-03-11 19:56:02