數據源形式 | InputStream | OutputStream | Reader | Writer |
ByteArray(字節數組) | ByteArrayInputStream | ByteArrayOutputStream | 無 | 無 |
File(文件) | FileInputStream | FileOutputStream | FileReader | FileWriter |
Piped(管道) | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
Object(對象) | ObjectInputStream | ObjectOutputStream | 無 | 無 |
String | StringBufferInputStream | 無 | StringReader | StringWriter |
CharArray(字符數組) | 無 | 無 | CharArrayReader | CharArrayWriter |
擴展功能點 | InputStream | OutputStream | Reader | Writer |
Data(基本類型) | DataInputStream | DataOutputStream | 無 | 無 |
Buffered(緩衝) | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
LineNumber(行號) | LineNumberInputStream | 無 | LineNumberReader | 無 |
Pushback(回退) | PushbackInputStream | 無 | PushbackReader | 無 |
Print(打印) | 無 | PrintStream | 無 | PrintWriter |
1.針對於各類數據源,四你們族的處理邏輯
|
2.擴展功能點的含義 |
字節數組,毫無疑問,不會應用在字符家族裏面
他應用於 ByteArrayInputStream 以及 ByteArrayOutputStream
他的內部包含一個 字節數組 byte buf[]
ByteArrayInputStream 以及 ByteArrayOutputStream 內部維護了一個byte buf[]
會將數據讀取到這個字節數組(緩衝區)
或者將數據寫入到這個字節數組(緩衝區)
他們維護的是這個內部的字節數組自己,並不會寫入文件
|
這兩個類本質就是操縱字節數組,提供對字節數組的讀取與寫入 它的本質如同文件同樣,都是用來存儲數據 只不過是數據存在於內存中而已 經過將數據封裝到內部的字符數組中,能夠提供IO一致性的接口 |
ByteArray 僅僅應用與字節流 |
前面說過,File 是最多見的一種數據形式 因此對IO提供針對文件的操做很是合理 咱們知道,全部的數據存儲最終都是字節的形式 可是對於文件的操做又是如此的頻繁和重要 因此,針對於字符的輸入輸出也提供了對應的處理 不過仍是那句話,最終文件都是字節形式存儲,因此,對於字符文件,天然須要進行編碼與解碼 FilterReader每一次的讀取都意味着一次解碼 FilterWriter每一次的寫入都意味着編碼 |
既然是文件,咱們前面介紹過File類 File類的構造主要由路徑名或者文件描述符 因此對於文件的輸入輸出相關的IO操做,天然能夠經過 路徑名 文件描述符 或者File 自己做爲目標對象 也就是說構造函數的參數通常都是這三者之一 |
對於文件的操做是實實在在的操做文件自己 File 四你們族都有應用 |
管道的概念,不是來自於java io很早前就有此概念 含義很是明朗,就如同他的名字同樣,管道,好像兩個水管鏈接起來,造成一個通道 這個通道是直接鏈接的,並不會再跑到別的地方去彎彎繞 管道流的主要做用是能夠進行兩個線程間的通信 既然主要做用進行線程間的通信,他就是傳輸數據使用的 IN 字節數組緩存數據,OUT使用IN對象 |
管道在四你們族中都有應用 |
ObjectInputStream 和 ObjectOutputStream 的做用是,對基本數據和對象進行序列化操做支持
ObjectOutputStream對象能提供對「基本數據或對象」的持久存儲
ObjectInputStream,讀取出這些「基本數據或對象」
只有支持 java.io.Serializable 或 java.io.Externalizable 接口的對象才能被ObjectInputStream/ObjectOutputStream所操做
|
序列化天然不可能就只有字符,因此Object僅僅針對字節家族 |
提供了對String類型的支持 reader讀取到String writer寫入到StringBuffer |
StringBufferInputStream 已經不推薦使用了 因此,後續能夠認爲String僅僅支持字符家族 |
Data是對基本數據類型的支持 針對於DataOutputStream寫出的數據文件 可使用DataInputStream進行讀取 也就是說是一種特殊形式的文件 |
他們底層依賴的仍是字節流 經過繼承FilterInputStream 和 FilterOutputStream 使用其中的InputStream in 以及 OutputStream out 這兩個對象是經過構造方法傳遞進來的 |
緩衝也就是爲了減小讀取的頻率,設置一個緩衝區 緩衝的概念處處都是,因此緩衝應用於四你們族 |
LineNumber是針對輸入的 因此存在於LineNumberInputStream和LineNumberReader 不過對於字節流的LineNumberInputStream 已經棄用 |
LineNumberReader是一個跟蹤行號的緩衝字符輸入流 也很顯然,流都是順序讀取不能回退的,因此想要讀取行號天然要藉助於緩存 他的實現繼承BufferedReader 也很好理解 |
主要是爲了提供數據打印的便利性 |
打印天然是針對於輸出的 PrintStream PrintWriter |