Java I/O 流概述
Java 流設計理念
Java 流類繼承層次
- 字節輸入流
- 字節輸出流
- 字符輸入流
- 字符輸出流
??Kotlin I/O基于 Java I/O 流技術,但是 Java I/O 流技術使用起來比較繁瑣,Kotlin 提供了很多擴展,是代碼變得簡潔。
一、Java I/O 流概述
??Kotlin I/O 流技術主要來自于 Java I/O 流技術,因此有必要先了解下 Java I/O 流技術。Java 將數據的輸入和輸出操作當作“流”來處理,“流”是一組有序的數據序列。“流”分為兩種形式:輸入流和輸出流。從數據源中讀取數據是輸入流,將數據寫入到目的地是輸出流。
??提示:以 CPU 為中心,從外部設備讀取數據到內存,進而再讀入到 CPU,這是輸入(Input,縮寫 I)的過程;將內存中的數據寫入到外部設備,這是輸出(output,縮寫 O)的過程。所以輸出輸出簡稱為 I/O。
二、Java 流設計理念
??數據輸入的數據源有多種形式,如文件、網絡和鍵盤燈,鍵盤是默認的標準輸入設備。而數據輸出的目的地也有多種形式,如文件、網絡和控制臺等。
I/O 流
??所有的輸入形式都抽象為輸入流,所有的輸出形式都抽象為輸出流,它們與設備無關。
三、Java 流類繼承層次
??以字節為單位的流稱為字節流,以字符為單位的流稱為字符流。Java 提供 4 個頂層抽象類,兩個字節流抽象類:InputStream
和 OutputStream
;兩個字符流抽象類:Reader
和 Writer
。
-
1、字節輸入流
字節輸入流的根類是InputStream
,它有很多子類,這些類的說明如下:
類 | 描述 |
---|---|
FileInputStream | 文件輸入流 |
ByteArrayInputStream | 面向字節數組的輸入流 |
PipedInputStream | 管道輸入流,用于兩個線程之間的數據傳遞 |
FilterInputStream | 過濾輸入流,它是一個裝飾器,用來擴展其他輸入流 |
BufferedInputStream | 緩沖區輸入流,它是 FilterInputStream 的子類 |
DataInputStream | 面向基本數據類型的輸入流 |
字節輸入流類繼承層次
-
2、字節輸出流
字節輸出流的根類是OutputStream
,它有很多子類,這些類的說明如下:
類 | 描述 |
---|---|
FileOutputStream | 文件輸出流 |
ByteArrayOutputStream | 面向字節數組的輸出流 |
PipedOutputStream | 管道輸出流,用于兩個線程之間的數據傳遞 |
FilterOutputStream | 過濾輸出流,它是一個裝飾器,用來擴展其他輸出流 |
BufferedOutputStream | 緩沖區輸出流,它是 FilterInputStream 的子類 |
DataOutputStream | 面向基本數據類型的輸出流 |
字節輸出流類繼承層次
-
3、字符輸入流
字符輸入流的根類是Reader
,這類流以 16 位的Unicode
編碼表示的字符為基本處理單位。它有很多子類,這些類的說明如下:
類 | 描述 |
---|---|
FileReader | 文件輸入流 |
CharArrayReader | 面向字符數組的輸入流 |
PipedReader | 管道輸入流,用于兩個線程之間的數據傳遞 |
FilterReader | 過濾輸入流,它是一個裝飾器,用來擴展其他輸入流 |
BufferedReader | 緩沖區輸入流,它也是一個裝飾器,但不是 FilterReader 的子類 |
InputStreamReader | 把字節流轉換為字符流,它也是一個裝飾器,是 FileReader 的父類 |
字符輸入流類繼承層次
-
4、字符輸出流
字符輸出流的根類是Writer
,這類流以 16 位的Unicode
編碼表示的字符為基本處理單位。它有很多子類,這些類的說明如下:
類 | 描述 |
---|---|
FileWriter | 文件輸出流 |
CharArrayWriter | 面向字符數組的輸出流 |
PipedWriter | 管道輸出流,用于兩個線程之間的數據傳遞 |
FilterWriter | 過濾輸出流,它是一個裝飾器,用來擴展其他輸出流 |
BufferedWriter | 緩沖區輸出流,它也是一個裝飾器,但不是 FilterWriter 的子類 |
OutputStreamWriter | 把字節流轉換為字符流,它也是一個裝飾器,是 FileWriter 的父類 |
字符輸出流類繼承層次