1. 程式人生 > >java IO流分類

java IO流分類

學習任何一種基本類庫都要先掌握基本結構,然後在基本結構之上再去看基本的實現類

一、基本結構的具體分類

1、以流讀取資料的基本單位來分

分為兩種(支援兩種型別的基本資料):原始資料和Unicode字元

java記憶體中存的字元都是Unicode編碼的,因此存在字元編碼的轉換問題,不管磁碟中編碼是什麼格式的,只要以字元為單位讀的之後,轉到程式中都是Unicode字元。反過來流去寫磁碟的時候,記憶體中這些字元都是Unicode編碼的,寫到磁碟中去的時候,要看磁碟檔案是什麼編碼的,會有一個Unicode字元和其它編碼字元的轉換過程。

2、根據這兩種資料型別,java流中分為兩大類

位元組流和字元流

3、4中基本類是InputStream、OutputStream、Reader、Writer


InputStream

以位元組為單位進行操作

1、InputStream是一個抽象類,還沒有例項化,是不能直接用的

2、子類

FileInputStream:對檔案進行讀取的位元組輸入流,基本單位是位元組(1個位元組是8位)  等等

3、基本操作

int read()throws IOException
//沒有任何形參
//一次可以讀取一個位元組,因為一個自己是8位的,所以返回型別是整形的
//這個方法丟擲的異常是非RuntimeException,所以說,這個方法一呼叫,程式碼中就要進行相應的處理
int read(byte[] buffer)throws IOException
//byte陣列有多大,一次就能讀多少位元組
int read(byte[] buffer,int offset,int length)throws IOException
//可以指定偏移量和每次讀取的長度
void close()throws IOException
//一般流裡面都會有,流用完都需要關閉

 


OutputStream

以位元組為單位進行操作

1、OutputStream是一個抽象類,還沒有例項化,是不能直接用的

2、基本方法

int write(int b)throws IOException
//每次寫一個數據回去
int write(byte[] b)throws IOException
//每次寫一個byte[]長的資料回去
void flush()throws IOException
//每次不是每次都往檔案中寫位元組,而是有一個緩衝區,先將資料寫到緩衝區中
//清空快取,將快取的資料寫到檔案中
//close()的時候會自動呼叫flush()

3、 輸出流寫位元組的時候,不是直接往檔案中寫,而是有一個緩衝區,將資料寫到緩衝區中,flush將快取中的資料寫到檔案中去,close在關閉流的時候,會自動呼叫flush。但是,如果讀寫過程比較長的話,因為最後才close,所以,寫到一定程度的時候,可以先flush一下,


Reader

以字元為單位進行操作

1、以字元為單位進行讀取,以字元為單位進行操作

2、返回的是字元


Writer

以字元為單位進行操作


二、分類

1、節點流:FileInputStream、FileOutputStream、FileReader、FileWriter都可以從特定的讀取或者寫入資料,直接從資料來源進行某些操作

2、處理流:不能直接從資料來源讀資料,而是從流/處理流中讀資料。


三、JAVA體系中常用流分類