程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中IO流簡介_動力節點Java學院整理

Java中IO流簡介_動力節點Java學院整理

編輯:關於JAVA

Java io簡介

Java io系統的設計初衷,就是為了實現“文件、控制台、網絡設備”這些io設置的通信。例如,對於一個文件,我們可以打開文件,然後進行讀取和寫入。在java 1.0中,java提供的類都是以字節(byte)為單位,例如,FileInputStream和FileOutputStream。而到了java 1.1,為了與國際化進行接軌,在java io中添加了許多以字符(Unicode)為單位進行操作的類。

在java io的稱呼中,我們經常會提到“輸入流”、“輸出流”等等概念。首先,什麼是流呢?

所謂“流”,就是一種抽象的數據的總稱,它的本質是能夠進行傳輸。

a) 按照“流”的數據流向,可以將其化分為:輸入流和輸出流。

b) 按照“流”中處理數據的單位,可以將其區分為:字節流和字符流。在java中,字節是占1個Byte,即8位;而字符是占2個Byte,即16位。而且,需要注意的是,java的字節是有符號類型,而字符是無符號類型!

Java io框架

有了上面的基本概念之後,我們看看java io的框架。

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

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

從中,我們可以看出。

(01) InputStream 是以字節為單位的輸入流的超類。InputStream提供了read()接口從輸入流中讀取字節數據。

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

(03) PipedInputStream 是管道輸入流,它和PipedOutputStream一起使用,能實現多線程間的管道通信。

(04) FilterInputStream 是過濾輸入流。它是DataInputStream和BufferedInputStream的超類。

(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 是過濾輸出流。它是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 是字符類型的打印輸出流。它是用來裝飾其它輸出流,能為其他輸出流添加了功能,使它們能夠方便地打印各種數據值表示形式。 

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

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

7. 字節轉換為字符流的框架圖

在java中,字節流能轉換為字符流,下面是它們的轉換關系圖。 

從中,我們可以看出。

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

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

8. 字節和字符的輸入流對應關系

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

認識了java io的總體框架之後。接下來,我們可以開始對其中的各個類進入學習,包括“它的作用和用法,源碼的探索”等方面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved