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