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體系中常用流分類