1. 程式人生 > >java輸入輸出--I/O流的概念和劃分

java輸入輸出--I/O流的概念和劃分

理解資料流

資料流(Stream)是一組有順序的,有起點的,有終點的位元組集合,是對輸入和輸出的總稱和抽象。

一般地,資料流分為 輸入流(InputStream)和輸出流(OutputStream)。輸入流只能讀不能寫,而輸出流只能寫不能讀。通常程式使用輸入輸出流,就好像資料流入程式,或從程式流出。

Java 程式通過流來完成輸入輸出。 流通過 java 的輸入輸出系統與物理裝置連線,儘管與它們連線的物理裝置不盡相同,所有流的行為具有同樣的方式。這樣,相同的輸入輸出類和方法適用於所有型別的外部裝置。這意味著一個輸入流能夠抽象多種不同型別的輸入:從磁碟檔案,從鍵盤或從網路套接字。同樣,一個輸出流可以輸出到控制檯,磁碟檔案或相連的網路。流是處理輸入輸出的一個簡便的方法。

把輸入流的指向稱作為資料來源(Data Source),把輸出流的指向稱作資料接收器(Data Sink),程式從資料來源讀入資料,向接收器寫資料,如下示意圖:
這裡寫圖片描述

java 流的劃分

Java2 定義了兩種型別的流: 位元組流字元流。位元組流(Byte Stream)為處理位元組的輸入和輸出提供了方法。例如:使用位元組流讀取或書寫二進位制資料。字元流(Character Stream)為 字元的輸入和輸出提供了方便。它們採用了統一的編碼標準,因而可以國際化。 在某些場合,字元流比位元組流更有效。

需要說明的是,在最底層,所有的輸入輸出都是位元組形式的。基於字元的流只為處理字元提供方便有效的方法。

位元組流類

位元組流在頂層由兩個抽象類:InputStream 和 OutputStream。每個抽象類都有多個具體的子類,這些子類對不同的外設進行處理,例如磁碟檔案,網路連線,甚至是記憶體緩衝區。

位元組輸入流 如下圖所示,灰色背景的類在使用的時候,需要具體的物理裝置,如檔案、陣列、管道等。白色背景的類(抽象類除外)在使用時,需要其他流的支援。
這裡寫圖片描述
位元組輸入流的說明如下:

描述
InputStream 表示輸入位元組流的抽象類
FileInputStream 檔案位元組輸入流
ByteArrayInputStream 位元組陣列輸入流,把位元組陣列作為資料來源
FilterInputStream 過濾位元組輸入流,提供擴充套件功能的輸入流
PipedInputStream 管道輸入流,可用於執行緒之間通訊
ObjectInputStream 物件輸入流
SequenceInputStream 順序輸入流,把多個流順序合併成一個流
AudioInputStream 音訊輸入流
BufferedInputStream 緩衝輸入流
CipherInputStream 加密輸入流,在輸入過程中,對資料進行加密或解密
DataInputStream 包含讀取 Java 標準資料型別方法的輸入流
DigestInputStream 摘要資料流,在輸入過程中,生成流的陣列摘要
ProgressMonitorInputStream 過程監視輸入流
PushbackInputStream 能夠向輸入流退回一個位元組的輸入流

位元組輸出流的說明如下:
這裡寫圖片描述

描述
OutputStream 表示輸出位元組流的抽象類
FileOutputStream 檔案位元組輸出流
ByteArrayOutputStream 位元組陣列輸出流,把位元組陣列作為資料接收器
FilterOutputStream 過濾位元組輸出流,提供擴充套件功能的輸出流
PipedOutputStream 管道輸出流,可用於執行緒之間通訊
ObjcetOutputStream 物件輸出流
BufferedOutputStream 緩衝輸出流
CipherOutputStream 加密輸出流,在輸出過程中,對資料進行加密或解密
DataOutputStream 包含寫 Java 標準資料型別方法的輸出流
DigestOutputStream 摘要資料流,在輸出過程中,生成流的數字摘要
PrintStream 列印流,包含 print() 和 println()的輸出流

抽象類 InputStream 和 OutputStream 定義了實現其他流類的關鍵方法。最重要的兩種方法時 read() 和 write() ,它們分別用於讀寫位元組。 兩種方法都在 InputStream 和 OutputStream 中被定義為抽象方法。它們被派生的流類重寫。

位元組流中還有一個流:RandomAccessFile ,支援隨機地存取檔案中的內容。

字元流類

字元流類頂層由兩個抽象類:Reader 和Writer。這些抽象類處理統一編碼的字元流。java 中有多個具體的子類。

字元輸入流的描述
這裡寫圖片描述

描述
Read 表示字元輸入流的抽象類
BufferedReader 帶緩衝功能的字元輸入流
CharArrayReader 把字元陣列作為輸入源的輸入流
FilterReader 過濾字元輸入流
InputStreamReader 位元組流向字元流轉化流
PipedReader 管道字元輸入流
StringReader 把字串作為資料來源的輸入流
LineNumberReader 能夠統計行數的輸入流
PushbackReader 能夠向輸入流退回一個字元的輸入流
FileReader 檔案字元輸入流

字元輸出流的描述
這裡寫圖片描述

描述
Writer 描述字元輸出流的抽象類
BufferedWriter 帶緩衝功能的字元輸出流
OutPutStreamWriter 位元組輸出流向字元輸出流的轉換
CharArrayWriter 把字元陣列作為資料接收器
FilterWriter 過濾字元輸出流
PipedWriter 管道字元輸出流
PrintWriter 列印字元輸出流,類似於PrintStream
StringWriter 把字串作為資料接收器
FileWriter 檔案字元輸出流

抽象類 Reader 和 Writer 定義了幾個實現其他流類的關鍵方法。其中兩個最重要的是 read() 和 write() ,它們分別進行字元資料的讀 和 寫。這些方法被派生流類重寫。