2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
它們本質(zhì)上并不相同,但它們對(duì)不同類型的數(shù)據(jù)執(zhí)行相同類型的操作。
InputStream
并OutputStream
以字節(jié)為單位工作。在處理非文本信息(例如圖像)時(shí),您會(huì)使用它們。
Reader
并Writer
在角色中工作。您會(huì)在處理文本信息時(shí)使用它們。
所以“是”和“不是”。:-)InputStream
和Reader
都用于讀取信息(分別為字節(jié)流或字符流),并且OutputStream
和Writer
都用于寫入信息(分別為字節(jié)流或字符流)。您使用哪種取決于您處理的數(shù)據(jù)類型。流是面向字節(jié)的。讀者/作者以性格為導(dǎo)向。
兩種數(shù)據(jù)之間存在橋接類:
InputStreamReader
從 an 中讀取并使用 a (明確提供或按名稱提供)InputStream
將字節(jié)轉(zhuǎn)換為字符。CharSet
OutputStreamWriter
相反:將字符轉(zhuǎn)換為字節(jié)(再次通過(guò) aCharSet
)并將字節(jié)寫入OutputStream
.
...但是大多數(shù)Reader
/Writer
子類讀取/寫入已經(jīng)基于字符的源/目標(biāo),因此根本不處理字節(jié)。例如,StringReader
從字符串中讀取字符。由于源(字符串)已經(jīng)是基于字符的,因此Reader
永遠(yuǎn)不會(huì)處理字節(jié),只處理字符。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
是的,你有正確的想法。標(biāo)準(zhǔn)類InputStreamReader和OutputStreamWriter充當(dāng)從字節(jié)流接口到字符流接口的適配器,只需要指定一個(gè) Charset(通常是 UTF-8)。該 Charset 將用于將傳入字節(jié)轉(zhuǎn)換為 Java 的 UTF-16 字符類型,因此值得注意的是,從 InputStream 和 Reader 讀取的實(shí)際字節(jié)始終相同是不正確的。
InputStream 通常用于讀取任何類型的數(shù)據(jù),而 Reader 僅適用于讀取文本數(shù)據(jù)。
添加回答
舉報(bào)