在網上看到Java的I/O,心中想:以前學過嗎?而且聽說,這個東西對於從事Java行業的人來說有特別的重要。壓抑不住一隻小白(我)的心理,來了解一下Java的I/O。
我在網上隨便找了一本書,來看一下Java對於I/O的處理。
這裏主要講的是輸入流和輸出流,輸出流和輸入流是相對於程序本身而言的。程序讀取數據稱爲打開輸入流,程序向其他源寫入數據稱爲打開輸出流。看圖:
注:(大神忽略)開始我也不是特別明白這是什麼意思,(以程序爲主語)程序讀進入程序的數據是輸入流,程序向外輸出數據即打開了輸出流,輸出流。
在java.io包中有各種I/O流類,這裏按照輸入輸出流處理的 不 同 數 據 類 型 對流進行分類,即字符(Character)流和字節(Byte)流。
1.字符流(16bit):
在Java的I/O系統提供了InputStream和OutputStream兩個抽象類實現字節(8位)數據的輸入/輸出。其中InputStream是輸入流的抽象類,提供了read()方法,每個實現了該類的子類都要實現該方法。
輸入流類:InputStream是一個抽象類,提供了抽象的read()方法。 輸出流類:OutputStream 提供了write()方法,同樣也是一個抽象類。
注:每個抽象類都有多個類繼承,複寫提供的方法,可以在api文檔java.io中找到,節省篇幅,不予寫出。
2.字節流(8bit):
字節流也分爲讀流數據類和寫流數據類,即Reader類和Writer類及其子類。Writer類是字符(Character)流輸出類的父類,它是抽象類,所有繼承自該類的子類都必須實現抽象方法write(),具體的實現類中write()方法的使用可以參考相應的JavaDoc文檔。這裏爲了區別InputStream和OutputStream使用了Reader和Writer,爲了使讀者習慣於使用Reader和Writer,並且中文中沒有合適的詞彙表達相應的流的概念,所以不再具體翻譯爲中文,使用時只要知道Reader類負責讀流數據,而Writer類負責向流中寫數據即可。
Write和Read都有多個類繼承了他們。
a.Writer:繼承自Writer類
BufferedWriter(帶緩衝的Writer)
CharArrayWriter(字符數組Writer)
FilterWriter(帶過濾器Writer)
PrintWriter(打印Writer)
PipedWriter(管道Writer)
StringWriter(字符串Writer)
OutputStreamWriter (輸出流Writer) , FilerWriter(文件Writer)繼承OutputStreamWriter 。
b.繼承自Reader類
BufferedReader
CharArrayReader(字符數組Reader)
FileReader
InputerStreamReader
FiterReader
LineNumberReader(帶行號Reader)
PipedReader
PushbackReader(推回Reader)
StringReader
接着在這說一下在網上看到的同時也解決了我的疑惑:
不管是磁盤還是網絡傳輸,最小的存儲單元都是字節,而不是字符,所以 I/O 操作的都是字節而不是字符,但是爲啥有操作字符的 I/O 接口呢?這是因爲我們的程序中通常操作的數據都是以字符形式,爲了操作方便當然要提供一個直接寫字符的 I/O 接口。
依據《Java:從入門到精通》這本書所寫,有興趣的可取看一下(大神無視就可以)
本人java初學者,肯定有寫的不規範的地方還請指正( ⊙ o ⊙ )