更新時間:2020-07-24 來源:黑馬程序員 瀏覽量:
一:IO流的分類
1)按流向分:
輸入流:讀取數據,把持久設備的數據讀取到內存中。
輸出流:寫出數據,把內存的數據寫出到持久設備。
2)按數據類型分:
計算機中一切數據都是:字節數據。
字符數據:底層還是字節數據,但是可以根據某些規則,把字節變成人們認識的文字、符號等等。
字節流:數據在持久設備上都是以二進制形式保存的。二進制就是字節數據。Java就給出了字節流可以直接操作字節數據。
字節輸入流:InputStream
子類:FileInputStream
字節輸出流:OutputStream
子類:FileOutputStream
字符流:讀取字符數據。數據在設備上是以二進制形式表示,但是有些二進制合并在一起可以表示一些字符數據。
字符輸入流:Reader
子類:FileReader
字符輸出流:Writer
子類:FileWriter
注意:
1)字節流可以對任意類型的文件按照字節進行讀和寫的操作;例如:圖片、視頻、文本文件、word文檔、mp3等。
2)字符流只能對文本類型的文件進行操作;例如:.java文件、.txt等文件。
二:字節流
1)字節輸出流 OutputStream
public void close() :關閉此輸出流并釋放與此流相關聯的任何系統資源。
public void write(byte[] byte):把這個byte字節數組中的所有數據寫到關聯的設備中(設備包括文件、網絡或者其他任何地方)。
public void write(byte[] b, int off, int len) :把b字節中的數據從下標off位置開始往出寫,共計寫len個。
public abstract void write(int b) : 把這個b數據寫到關聯的設備中。
注意:close方法,當完成流的操作時,必須調用此方法,釋放系統資源。
2)字節輸入流 InputStream
public void close() :關閉此輸入流并釋放與此流相關聯的任何系統資源。
public abstract int read(): 調用一次read,就可以從關聯的文件中讀取一個字節數據,并返回這個字節數據。方法可以從關聯的文件中讀取數據。所有read方法如果讀取到文件的末尾,都會返回-1。遇到-1就代表文件中的數據已經被讀取完畢。
public int read(byte[] byte):調用一次,讀取多個字節數據,把讀到的字節數據保存在傳遞的byte字節數組中。返回字節數組中讀取的字節個數。注意:這個返回值不是數組長度。
注意:close方法,當完成流的操作時,必須調用此方法,釋放系統資源。
三:字符流
1)字符輸入流 Reader
public void close() :關閉此流并釋放與此流相關聯的任何系統資源。
public int read(): 調用一次讀取一個字符,返回字符的編碼值。即讀取的內容存放到返回值中。如果讀取到文件末尾返回-1;
public int read(char[] chs):調用一次讀取多個字符,把這些字符保存在chs中,返回給字符數組中存儲的字符個數,如果讀取到文件末尾返回-1;
注意:雖然讀取了一個字符,但是會自動提升為int類型。
2)字符輸出流 Writer
public abstract void close() :關閉此輸出流并釋放與此流相關聯的任何系統資源。
public abstract void flush() :刷新此輸出流并強制任何緩沖的輸出字符被寫出。
public void write(int b) :寫出一個字符。
public void write(char[] chs):將字符從指定的字符數組寫出此輸出流。
public abstract void write(char[] b, int off, int len) :從指定的字符數組寫出 len字符,從偏移量 off開始輸出到此輸出流。
public void write(String str) :寫出一個字符串。
說明:字符輸入和字符輸出流都是自帶緩沖區的。緩沖區就是在類的底層封裝了一個數組,如果我們使用字符輸出流向目的地文件中寫數據的時候,數據不會立刻寫到目的地文件中,而是寫到自帶的數組中,數據還在內存中,所以我們必須調用FileWriter類中的刷新方法flush將數組中的數據刷新到目的地硬盤文件中。
注意:
1. 雖然參數為int類型四個字節,但是只會保留一個字符的信息寫出。
2. 未調用close方法,數據只是保存到了緩沖區,并未寫出到文件中。
猜你喜歡:
Java高級軟件工程師課程