java io ----- 01

java io 簡介

java io 系統設計的初衷,就是爲了實現"文件,控制檯,網絡設備"這些io設置的通信,例如,對於一個文件,然後進行讀取和寫入。

在java1.0中,java提供的類都是以字節爲單位,例如FileInputStream 和 FileOutputStream,而到了java1.1爲了與國際化進行接軌,在java io中添加了許多以字符(Unicode)爲單位進行操作的類

在java io中我們經常會提到"輸入流","輸出流"等等概念,首先,什麼是流吶?

流是一種抽象數據的總稱,它的本質是能夠進行傳輸

a 按照流向 可以分爲 輸入流和輸出流

b 按照流中處理的單位 可以將其區分爲字節流和字符流 一個是兩個字節的 一個是一個字節的

java io 框架

1 以字節爲單位的輸入流的框架圖

 

 01 從中我們可以看出 以字節爲單位的輸入流的公共父類是InputStream InPutStream提供了read()接口從輸入流中讀取字節數

022ByteArrayInputStream是字節數組輸入流,它包含一個內部緩衝區,該緩衝區包含從流中讀取的字節;通俗點講,它的內部緩衝區就是一個字節數組,而ByteArrayInputStream本質就是通過字節數組來實現的

03 PipedInputStram是管道輸入流,它和PipOutputStream一起使用,能實現多線程間的管道通信

04 FilterInputStream是過濾輸入流 它是DateInputStream和BufferInputStream的超類

05 DataInputStream是數據輸入流,它是用來裝飾其他輸入流的,它允許應用程序與及其無關的方式從底層輸入流中讀取基本java

06 BufferInputStream是緩衝輸入流,它的作用是爲和另一個輸入流添加緩衝功能

07 File是文件和"目錄路徑名"的抽象表示形式,關於File,注意兩點

a File不僅僅表示文件,他也可以表示目錄

b File雖然在io中重定義,但是它的超類是Object,而不是Inputstream

08 FileDescriptor 是文件描述符 它可以被用來表示開放文件 開放套接字

09 FileInputStream 是文件輸入流,它通常用於對文件進行讀取操作

10 ObjectInputStram是對象輸入流,它和ObjectOutputStream一起,用來提供對基本數據或對象的持久存

2 以字節爲單位的輸出流的框架圖

從中,我們可以看出。以字節爲單位的輸出流的公共父類是OutputStream。
(01) OutputStream 是以字節爲單位的輸出流的超類。OutputStream提供了write()接口從輸出流中讀取字節數據。
(02) ByteArrayOutputStream 是字節數組輸出流。寫入ByteArrayOutputStream的數據被寫入一個 byte 數組。緩衝區會隨着數據的不斷寫入而自動增長。可使用 toByteArray() 和 toString() 獲取數據。
(03) PipedOutputStream 是管道輸出流,它和PipedInputStream一起使用,能實現多線程間的管道通信。
(04) FilterOutputStream 是過濾輸出流。它是DataOutputStream,BufferedOutputStream和PrintStream的超類。
(05) DataOutputStream 是數據輸出流。它是用來裝飾其它輸出流,它“允許應用程序以與機器無關方式向底層寫入基本 Java 數據類型”。
(06) BufferedOutputStream 是緩衝輸出流。它的作用是爲另一個輸出流添加緩衝功能。
(07) PrintStream 是打印輸出流。它是用來裝飾其它輸出流,能爲其他輸出流添加了功能,使它們能夠方便地打印各種數據值表示形式。
(08) FileOutputStream 是文件輸出流。它通常用於向文件進行寫入操作。
(09) ObjectOutputStream 是對象輸出流。它和ObjectInputStream一起,用來提供對“基本數據或對象”的持久存儲。

3. 以字節爲單位的輸入流和輸出流關聯的框架圖

輸入流和輸出流都有對應的關係,下面是將以字節爲單位的輸入流和輸出流關聯起來的圖片。

4 以字符爲單位的輸入流的框架圖

下面是以字符爲單位的輸入流的框架圖

從中,我們可以看出。以字符爲單位的輸入流的公共父類是Reader

(01) Reader 是以字符爲單位的輸入流的超類。它提供了read()接口來取字符數據。
(02) CharArrayReader 是字符數組輸入流。它用於讀取字符數組,它繼承於Reader。操作的數據是以字符爲單位!
(03) PipedReader 是字符類型的管道輸入流。它和PipedWriter一起是可以通過管道進行線程間的通訊。在使用管道通信時,必須將PipedWriter和PipedReader配套使用。
(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 是字符類型的打印輸出流。它是用來裝飾其它輸出流,能爲其他輸出流添加了功能,使它們能夠方便地打印各種數據值表示形式。

以字符爲單位的輸入流和輸出流的框架圖

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

7 字節轉換爲字符流的框架圖

在java中,字節流能轉換爲字符流,下面是他們的轉換關係圖

從中,我們可以看出

01 FileReader繼承於InPutStreamReader,而InPutStreamReader依賴於InputStream 具體表現在InputStreamReader的構造函數是以InputStream爲參數。我們傳入InputStream,在inputStreamReader內部通過轉碼,將字節碼轉成字符。

02  FileWriter繼承於OutputStreamWriter,而OutputStreamWriter依賴於OutputStream。具體表現在OutputStreamWriter的構造函數是以OutputStream爲參數。我們傳入OutputStream,在OutputStreamWriter內部通過轉碼,將字節轉換成字符。

8 字節和字符輸入流對應關係

9 字節和字符的輸出流的對應關係

發佈了84 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章