瞭解 Java IO 中的概念

目錄

 

Java的 IO 類庫的基本架構

什麼是 IO 流?

字節流與字符流

輸入流與輸出流

節點流

處理流


Java的 IO 類庫的基本架構

1、基於字節操作的I/O接口:InputStream和OutputStream;

2、基於字符操作的I/O接口:Writer和Reader;

3、基於磁盤操作的I/O接口:File;

4、基於網絡操作的I/O接口:Socket。

 

什麼是 IO 流?

流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱爲流,流的本質是數據傳輸,根據數據傳輸特性將流抽象爲各種類,方便更直觀的進行數據操作。

 

字節流與字符流

字符流的由來:

因爲數據編碼的不同,而有了對字符進行高效操作的流對象。本質其實就是基於字節流讀取時,去查了指定的碼錶。

 

字節流與字符流的區別:

1、讀寫單位不同:字節流以字節(8bit)爲單位,字符流以字符爲單位,根據碼錶映射字符,一次可能讀多個字節。

2、處理對象不同:字節流能處理所有類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。

3、字節流:一次讀入或讀出是8位二進制。

4、字符流:一次讀入或讀出是16位二進制。

注:設備上的數據無論是圖片或者視頻,文字,它們都以二進制存儲的。二進制的最終都是以一個8位爲數據單元進行體現,所以計算機中的最小數據單元就是字節。意味着,字節流可以處理設備上的所有數據,所以字節流一樣可以處理字符數據。

因此,只要是處理純文本數據,就優先考慮使用字符流。 除此之外都使用字節流。

 

輸入流與輸出流

輸入流只能進行讀操作,輸出流只能進行寫操作,程序中需要根據待傳輸數據的不同特性而使用不同的流。

 

輸入字節流 InputStream

InputStream 是所有的輸入字節流的父類,它是一個抽象類。

常見的輸入字節流如下:

ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。

PipedInputStream 是從與其它線程共用的管道中讀取數據。

ObjectInputStream 和所有FilterInputStream 的子類都是裝飾流(裝飾器模式的主角)。

 

輸出字節流 OutputStream

OutputStream 是所有的輸出字節流的父類,它是一個抽象類。

常見的輸出字節流如下:

ByteArrayOutputStream、StringBufferOutputStream、FileOutputStream 是兩種基本的介質流,它們分別向Byte 數組、和本地文件中寫入數據。

PipedOutputStream 是向與其它線程共用的管道中寫入數據。

ObjectOutputStream 和所有FilterOutputStream 的子類都是裝飾流。

 

節點流

節點流:直接與數據源相連,讀入或讀出。

常用的節點流:

父類 :InputStream 、OutputStream、 Reader、 Writer。

文件 :FileInputStream 、FileOutputStrean 、FileReader 、FileWriter 文件進行處理的節點流。

數組:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter 對數組進行處理的節點流(對應的不再是文件,而是內存中的一個數組)。

字符串:StringReader、StringWriter 對字符串進行處理的節點流。

管道:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter對管道進行處理的節點流。

 

處理流

直接使用節點流,讀寫不方便,爲了更快的讀寫文件,纔有了處理流。

處理流和節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流。如BufferedReader 處理流的構造方法總是要帶一個其他的流對象做參數,這是典型的裝飾器模式。一個流對象經過其他流的多次包裝,稱爲流的鏈接。

常用的處理流:

緩衝流:BufferedInputStream 、BufferedOutputStream、 BufferedReader、 BufferedWriter,增加了緩衝功能,避免頻繁讀寫硬盤。

轉換流:InputStreamReader 、OutputStreamReader,實現字節流和字符流之間的轉換。InputStreamReader 、OutputStreamWriter 要InputStream或OutputStream作爲參數,實現從字節流到字符流的轉換。

數據流: DataInputStream 、DataOutputStream 等提供將基礎數據類型寫入到文件中,或者讀取出來。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章