1. 程式人生 > >Java IO: Reader和Writer

Java IO: Reader和Writer

作者: Jakob Jenkov 譯者: 李璟([email protected])

Reader

原文連結

Reader是Java IO中所有Reader的基類。Reader與InputStream類似,不同點在於,Reader基於字元而非基於位元組。換句話說,Reader用於讀取文字,而InputStream用於讀取原始位元組。

請記住,Java內部使用UTF8編碼表示字串。輸入流中一個位元組可能並不等同於一個UTF8字元。如果你從輸入流中以位元組為單位讀取UTF8編碼的文字,並且嘗試將讀取到的位元組轉換成字元,你可能會得不到預期的結果。

read()方法返回一個包含了讀取到的字元內容的int型別變數(譯者注:0~65535)。如果方法返回-1,表明Reader中已經沒有剩餘可讀取字元,此時可以關閉Reader。-1是一個int型別,不是byte或者char型別,這是不一樣的。

你通常會使用Reader的子類,而不會直接使用Reader。Reader的子類包括InputStreamReader,CharArrayReader,FileReader等等。可以檢視Java IO概述瀏覽完整的Reader表格。

Reader通常與檔案、字元陣列、網路等資料來源相關聯,Java IO概述中同樣說明了這一點。

Writer

原文連結

Writer是Java IO中所有Writer的基類。與Reader和InputStream的關係類似,Writer基於字元而非基於位元組,Writer用於寫入文字,OutputStream用於寫入位元組。

同樣,你最好使用Writer的子類,不需要直接使用Writer,因為子類的實現更加明確,更能表現你的意圖。常用子類包括OutputStreamWriter,CharArrayWriter,FileWriter等。

Writer的write(int c)方法,會將傳入引數的低16位寫入到Writer中,忽略高16位的資料。