Java的IO可分為以下幾類。
一.處理byte的類別有:
1.InputStream, 可作為input使用, 主要的子類別有:
ByteArrayInputStream, 讀入來源為byte array
FileInputStream, 讀入來源為File
ObjectInputStream, 將其他InputStream加工後, 可用來讀入Object
DataInputStream, 將其他InputStream加工後, 可用來讀入int, float, double, boolean, bye, char等基本資料型態
2.OutputStream, 可作為input使用, 主要的子類別有:
ByteArrayOutputStream, 輸出到byte array
FileOutputStream, 輸出到File
ObjectOutputStream, 將其他OutputStream加工後, 可用來輸出Object
DataOutputStream, 將其他OutputStream加工後, 可用來寫出int, float, double, boolean, bye, char等基本資料型態
PrintStream, 可將各種基本資料型態和字串以文字形式輸出, System.out就是一個PrintStream
二.處理char的類別有:
1.Reader, 作為char輸入, 具有將輸入編碼轉為Unicode編碼的能力, 主要的子類別有:
BufferedReader, 具有緩衝功能, 可讓IO比較有效率
CharArrayReader, 由某個字元陣列作為輸入
InputStreamReader, 作為InputStream轉為Reader的介面
FileReader, 由檔案讀入char
2.Writer, 作為char輸出, 具有將Unicode編碼轉為輸出編的能力, 主要的子類別有:
BufferedWriter, 具有緩衝功能, 可讓IO比較有效率
CharArrayWriter, 輸出到某個字元陣列
OutputStreamWriter, 作為Writer轉到OutputStream的介面
FileWriter, 將char輸出到檔案
三.處理檔案的類別有:
File, 具有新增刪除檔案, 查詢檔案長度, 查詢檔案屬性, 查詢路徑等功能。
I/O 以連接的節點(Node)、傳送的資料型態、以及輸入/輸出來區分通常做位元組傳輸,會叫做Stream
,以常見的字串傳輸,會叫做Reader/Writer,舉例來說,FileInputStream是做檔案位元輸入的類別;InputStreamReader是做字串輸入的類別,Pipe是比較特殊的用途。
字串處理的I/O被分離在Reader和Writer類別底下,其他的都直接繼承了InputStream、OutputStream
不論是哪一種傳輸,都是以節點(Node)做為起點或終點,做出Stream這樣的動作,Stream就如同字面上的意思,像水流一樣,有開有關,當Read()或write()方法被呼叫時,串流就會開啟,直到close()被呼叫為止。有時候串流會有保護同時只開放一個程序使用,因此必須記得close()串流,避免其他程序無法使用。