1. 程式人生 > >Java-IO之總框架

Java-IO之總框架

在Java IO中我們會經常提到輸入流和輸出流,流是一種抽象的資料總稱,本質是能夠進行資料的傳輸。按照流的方向分為:輸入流和輸出流。按照流中處理資料的單位,可以將其區分為:位元組流和字元流。在Java中,位元組就是1個Byte,8位,而字元是佔2個Byte,16位,位元組是有符號型別,字元是無符號型別的。 接下來分別討論輸入流、輸出流、位元組流和字元流。 一、以位元組為單位的輸入流的框架圖:
從上圖我們可以看出以位元組為單位的輸入流的公共父類是InputStream: (1)InputStream是以位元組為單位的輸入流的超類,InputStream提供了介面從輸入流中讀取位元組資料。 (2)ByteArrayInputStream是位元組陣列輸入流,它的內部緩衝區是一個位元組陣列,本質是通過位元組陣列來是實現的。 (3)PipedInputStream是管道輸入流,能夠實現多執行緒間的管道通訊。 (4)FilterInputStream是過濾輸入流,它是DataInputStream和BufferedInputStream的超類。 (5)DataInputStream是資料輸入流,用來裝飾其他輸入流,允許應用程式以與機器無關方式從底層輸入流中讀取基本Java資料型別。 (6)BufferedInputStream是緩衝輸入流,作用是為另一個輸入流新增緩衝功能。 (7)FileInputStream是檔案輸入流,通常用於對檔案進行讀取操作。 (8)File是檔案和目錄路徑名的抽象表示形式,File不僅僅表示檔案,也可以表示目錄,它的超類是Object。 (9)FileDescriptor是檔案描述符,用來表示開放檔案,開放套接字等。 (10)ObjectInputStream是物件輸入流,和ObjectOutputStream一起來對基本資料或物件進行持久儲存。 二、以位元組為單位的輸出流的框架圖:

從中我們可以看出,以位元組為單位的輸出流的公共父類是OutputStream: (1)OutputStream是以位元組為單位的輸出流的超類,提供了write()函式從輸出流中讀取位元組資料。 (2)ByteArrayOutputStream是位元組陣列輸出流,寫入ByteArrayOutputStream的資料被寫入到一個byte陣列,緩衝區會隨著資料的不斷寫入而自動增長,可使用toByteArray()和toString()獲取資料。 (3)PipedOutputStream是管道輸出流,和PipedInputStream一起使用,能實現多執行緒間的管道通訊。 (4)FilterOutputStream是過濾輸出流,是DataOutputStream,BufferedOutputStream和PrintStream的超類 (5)DataOutputStream是資料輸出流,用來裝飾其他的輸出流,允許應用程式以與機器無關方式向底層寫入基本Java資料型別。 (6)BufferedOutputStream是緩衝輸出流,它的作用是為另一個輸出流新增緩衝功能。 (7)PrintStream是列印輸出流,用來裝飾其他輸出流,為其他輸出流新增功能,方便的列印各種資料值 (8)FileOutputStream是檔案輸出流,通常用於向檔案進行寫入操作。 (9)ObjectOutputStream是物件輸出流,它和ObjectInputStream一起對基本資料或者物件的持久儲存。 三、以位元組為單位的輸入流和輸出流關聯的框架圖 輸入流和輸出流都有對應的關係,如圖:

四、以字元為單位的輸入流的框架圖:



從圖我們可以看出,以字元為單位的輸入流的公共類是Reader。 (1)Reader是以字元為單位的輸入流的超類,它提供了read()介面來取字元資料。 (2)CharArrayReader 是字元陣列輸入流,用於讀取字元陣列,繼承於Reader。操作的資料是以字元為單位。 (3)PipedReader 是字元型別的管道輸入流,它和PipedWriter一起可以通過管道進行程序間的通訊,在使用管道通訊時,必須將PipedWriter和PipedReader配套使用。 (4)FilterReader是字元型別的過濾輸入流。 (5)BufferedReader是字元緩衝輸入流,作用是為另一個輸入流新增緩衝功能。 (6)InputStreamReader是位元組轉字元的輸入流,它是位元組流通向字元流的橋樑。 (7)FileReader是字元型別的檔案輸入流,通常用於對檔案進行讀取操作。 五、以字元為單位的輸出流的框架圖:

從圖中可以看出,Writer是所有字元輸出流的超類。 (1)Writer是以字元為單位的輸出流的超類,它提供了writer()函式,進行對字元的寫。 (2)CharArrayWriter是字元陣列輸出流,用於讀取字元陣列,繼承於Writer,操作資料的單位是字元。 (3)PipedWriter是字元型別的管道輸出流,它和PipedReader一起是可以通過管道進行執行緒間的通訊,在使用管道通訊時,必須將PipedReader和PipedWriter配套使用。 (4)FilterWriter是字元型別的過濾輸出流。 (5)BufferedWriter是字元緩衝輸出流,作用是為另一個輸出流新增緩衝功能。 (6)OutStreamWriter是位元組轉字元的輸出流,是位元組通向字元流的橋樑。 (7)FileWriter 是字元型別的檔案輸出流。 (8)File,獲取檔案或者目錄物件 (9)PrintWriter是字元型別的列印輸出,用來裝飾其他輸出流,能為其他的輸出流新增功能。 六、以字元為單位的輸入流和輸出流關聯的框架圖:



七、位元組轉換為字元流的框架圖 在java中,位元組流能轉換為字元流,轉換關係圖
從上圖可以看出: (1)FileReader繼承於InputStreamReader,而InputStreamReader依賴於InputStream,因為InputStreamReader的建構函式是以InputStream為引數,傳人InputStream會在InputStreamReader內部通過轉碼,將位元組轉換成字元。 (2)FileWriter繼承於OutputStreamWriter,而OutStreamWriter依賴於OutputStream,因為OutputStreamWriter的建構函式是以OutputStream為引數,我們傳人OutputStream會在OutputStreamWriter內部通過轉碼,將位元組轉換成字元。 八、位元組和字元的輸入流對應關係:

九、位元組和字元的輸出流對應關係