1. 程式人生 > >Java基礎整理之JavaIO

Java基礎整理之JavaIO

1. 以位元組為單位的輸入流的框架圖

下面,是以位元組為單位的輸入流的框架圖。


從中,我們可以看出。
(01) InputStream
是以位元組為單位的輸入流的超類。InputStream提供了read()介面從輸入流中讀取位元組資料。
(02) ByteArrayInputStream
是位元組陣列輸入流。它包含一個內部緩衝區,該緩衝區包含從流中讀取的位元組;通俗點說,它的內部緩衝區就是一個位元組陣列,而ByteArrayInputStream本質就是通過位元組陣列來實現的。
(03) PipedInputStream
是管道輸入流,它和PipedOutputStream一起使用,能實現多執行緒間的管道通訊。
(04) FilterInputStream

是過濾輸入流。它是DataInputStreamBufferedInputStream的超類。
(05) DataInputStream
是資料輸入流。它是用來裝飾其它輸入流,它允許應用程式以與機器無關方式從底層輸入流中讀取基本 Java 資料型別
(06) BufferedInputStream
是緩衝輸入流。它的作用是為另一個輸入流新增緩衝功能。
(07) File
檔案目錄路徑名的抽象表示形式。關於File,注意兩點:
a), File
不僅僅只是表示檔案,它也可以表示目錄!
b), File
雖然在io保重定義,但是它的超類是Object,而不是InputStream
(08) FileDescriptor
檔案描述符。它可以被用來表示開放檔案、開放套接字等。
(09) FileInputStream
是檔案輸入流。它通常用於對檔案進行讀取操作。
(10) ObjectInputStream
是物件輸入流。它和ObjectOutputStream一起,用來提供對基本資料或物件的持久儲存。

2. 以位元組為單位的輸出流的框架圖

下面,是以位元組為單位的輸出流的框架圖。


從中,我們可以看出。以位元組為單位的輸出流的公共父類是OutputStream
(01) OutputStream
是以位元組為單位的輸出流的超類。OutputStream提供了write()介面從輸出流中讀取位元組資料。
(02) ByteArrayOutputStream

是位元組陣列輸出流。寫入ByteArrayOutputStream的資料被寫入一個 byte 陣列。緩衝區會隨著資料的不斷寫入而自動增長。可使用 toByteArray() toString() 獲取資料。
(03) PipedOutputStream
是管道輸出流,它和PipedInputStream一起使用,能實現多執行緒間的管道通訊。
(04) FilterOutputStream
是過濾輸出流。它是DataOutputStreamBufferedOutputStreamPrintStream的超類。
(05) DataOutputStream
是資料輸出流。它是用來裝飾其它輸出流,它允許應用程式以與機器無關方式向底層寫入基本 Java 資料型別
(06) BufferedOutputStream
是緩衝輸出流。它的作用是為另一個輸出流新增緩衝功能。
(07) PrintStream
是列印輸出流。它是用來裝飾其它輸出流,能為其他輸出流添加了功能,使它們能夠方便地列印各種資料值表示形式。
(08) FileOutputStream
是檔案輸出流。它通常用於向檔案進行寫入操作。

(09) ObjectOutputStream 是物件輸出流。它和ObjectInputStream一起,用來提供對基本資料或物件的持久儲存。

3. 以位元組為單位的輸入流和輸出流關聯的框架圖

輸入流和輸出流都有對應的關係,上面是將以位元組為單位的輸入流和輸出流關聯起來的圖片。

4. 以字元為單位的輸入流的框架圖

下面,是以字元為單位的輸入流的框架圖。


從中,我們可以看出。以字元為單位的輸入流的公共父類是Reader
(01) Reader
是以字元為單位的輸入流的超類。它提供了read()介面來取字元資料。
(02) CharArrayReader
是字元陣列輸入流。它用於讀取字元陣列,它繼承於Reader。操作的資料是以字元為單位!
(03) PipedReader
是字元型別的管道輸入流。它和PipedWriter一起是可以通過管道進行執行緒間的通訊。在使用管道通訊時,必須將PipedWriterPipedReader配套使用。
(04) FilterReader
是字元型別的過濾輸入流。
(05) BufferedReader
是字元緩衝輸入流。它的作用是為另一個輸入流新增緩衝功能。
(06) InputStreamReader
是位元組轉字元的輸入流。它是位元組流通向字元流的橋樑:它使用指定的charset 讀取位元組並將其解碼為字元。

(07) FileReader 是字元型別的檔案輸入流。它通常用於對檔案進行讀取操作。

5. 以字元為單位的輸出流的框架圖

下面,是以字元為單位的輸出流的框架圖。


(01) Writer 是以字元為單位的輸出流的超類。它提供了write()介面往其中寫入資料。
(02) CharArrayWriter 是字元陣列輸出流。它用於讀取字元陣列,它繼承於Writer。操作的資料是以字元為單位!
(03) PipedWriter 是字元型別的管道輸出流。它和PipedReader一起是可以通過管道進行執行緒間的通訊。在使用管道通訊時,必須將PipedWriter和PipedWriter配套使用。
(04) FilterWriter 是字元型別的過濾輸出流。
(05) BufferedWriter 是字元緩衝輸出流。它的作用是為另一個輸出流新增緩衝功能。
(06) OutputStreamWriter 是位元組轉字元的輸出流。它是位元組流通向字元流的橋樑:它使用指定的 charset 將位元組轉換為字元並寫入。
(07) FileWriter 是字元型別的檔案輸出流。它通常用於對檔案進行讀取操作。

(08) PrintWriter 是字元型別的列印輸出流。它是用來裝飾其它輸出流,能為其他輸出流添加了功能,使它們能夠方便地列印各種資料值表示形式。

6. 以字元為單位的輸入流和輸出流關聯的框架圖

下面是將以字元為單位的輸入流和輸出流關聯起來的圖片。


7. 位元組轉換為字元流的框架圖

java中,位元組流能轉換為字元流,下面是它們的轉換關係圖。


從中,我們可以看出。
(01) FileReader
繼承於InputStreamReader,而InputStreamReader依賴於InputStream。具體表現在InputStreamReader的建構函式是以InputStream為引數。我們傳入InputStream,在InputStreamReader內部通過轉碼,將位元組轉換成字元。

(02) FileWriter繼承於OutputStreamWriter,而OutputStreamWriter依賴於OutputStream。具體表現在OutputStreamWriter的建構函式是以OutputStream為引數。我們傳入OutputStream,在OutputStreamWriter內部通過轉碼,將位元組轉換成字元。

8. 位元組和字元的輸入流對應關係

9. 位元組和字元的輸出流對應關係

本文借鑑於我的大學同學也是我的老師--張亮,謝謝!拿出來分享一波=3=