1. 程式人生 > >java 流的分類(java流總結一)

java 流的分類(java流總結一)

首先,流是什麼?

流是個抽象的概念,是對輸入輸出裝置的抽象,Java程式中,對於資料的輸入/輸出操作都是以“流”的方式進行。裝置可以是檔案,網路,記憶體等。

如果資料的流向是程式至裝置,我們成為輸出流,反之我們稱為輸入流。


流有哪些分類?

可以從不同的角度對流進行分類:

1. 處理的資料單位不同,可分為:字元流,位元組流

位元組流河字元流的區別:(各自在什麼情況下使用)

字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元陣列或字串,而位元組流處理單元為1個位元組, 操作位元組和位元組陣列。所以字元流是由Java虛擬機器將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支援性比較好!如果是 音訊檔案、圖片、歌曲,就用位元組流好點,如果是關係到中文(文字)的,用字元流好點. 


2.資料流方向不同,可分為:輸入流,輸出流

3.功能不同,可分為:節點流,處理流

1. 和 2. 都比較好理解,對於根據功能分類的,可以這麼理解:

節點流:節點流從一個特定的資料來源讀寫資料。即節點流是直接操作檔案,網路等的流,例如FileInputStream和FileOutputStream,他們直接從檔案中讀取或往檔案中寫入位元組流。


處理流“連線”在已存在的流(節點流或處理流)之上通過對資料的處理為程式提供更為強大的讀寫功能。處理流是使用一個已經存在的輸入流或輸出流連線建立的,處理流就是對節點流進行一系列的包裝。例如BufferedInputStream和BufferedOutputStream,使用已經存在的節點流來構造,提供帶緩衝的讀寫,提高了讀寫的效率,以及DataInputStream和DataOutputStream,使用已經存在的節點流來構造,提供了讀寫Java中的基本資料型別的功能。他們都屬於處理流



流結構介紹

Java所有的流類位於java.io包中,都分別繼承字以下四種抽象流型別。

位元組流 字元流
輸入流 InputStream Reader
輸出流 OutputStream Writer
1.繼承自InputStream/OutputStream的流都是用於向程式中輸入/輸出資料,且資料的單位都是位元組(byte=8bit),如圖,深色的為節點流,淺色的為處理流。


2.繼承自Reader/Writer的流都是用於向程式中輸入/輸出資料,且資料的單位都是字元(2byte=16bit),如圖,深色的為節點流,淺色的為處理流。


常見流類介紹:(後面的文章會一一介紹)

節點流型別常見的有:

對檔案操作的字元流有FileReader/FileWriter,位元組流有FileInputStream/FileOutputStream。

處理流型別常見的有:

緩衝流:緩衝流要“套接”在相應的節點流之上,對讀寫的資料提供了緩衝的功能,提高了讀寫效率,同事增加了一些新的方法。

  位元組緩衝流有BufferedInputStream/BufferedOutputStream,字元緩衝流有BufferedReader/BufferedWriter,字元緩衝流分別提供了讀取和寫入一行的方法ReadLine和NewLine方法。字元緩衝流當然要套結字元流(Reader和Writer)

  對於輸出地緩衝流,寫出的資料,會先寫入到記憶體中,再使用flush方法將記憶體中的資料刷到硬碟。所以,在使用字元緩衝流的時候,一定要先flush,然後再close,避免資料丟失。

轉換流:用於位元組資料到字元資料之間的轉換

  僅有字元流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要與InputStream“套接”,OutputStreamWriter需要與OutputStream“套接”。

資料流:提供了讀寫Java中的基本資料型別的功能。

  DataInputStream和DataOutputStream分別繼承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream型別的節點流之上。

物件流:用於直接將物件寫入寫出。

  流類有ObjectInputStream和ObjectOutputStream,本身這兩個方法沒什麼,但是其要寫出的物件有要求,該物件必須實現Serializable介面,來宣告其是可以序列化的。否則,不能用物件流讀寫。