結(jié)構(gòu)圖
定義
能被連續(xù)讀取數(shù)據(jù)的數(shù)據(jù)源和能被連續(xù)寫(xiě)入數(shù)據(jù)的接收端就是流
字節(jié)流與字符流的區(qū)別
字符流 --讀到一個(gè)或多個(gè)字節(jié)(中文兩個(gè)字節(jié),UTF-8碼表中3個(gè)字節(jié)),先查表,再返回字符.只能處理字符數(shù)據(jù),純文本有心考慮使用字符流
字節(jié)流 --讀到一個(gè)字節(jié)就返回一個(gè)字節(jié),可以處理所有數(shù)據(jù)類型
體系
基本的功能就是讀和寫(xiě)
1.字符流小結(jié):
close() --資源的釋放
FileReader除了自己的構(gòu)造函數(shù)外沒(méi)有特有的方法:
用于讀取文本文件的流對(duì)象
用于關(guān)聯(lián)文本文件
構(gòu)造函數(shù)FileReader(String fileName) --在讀取流對(duì)象初始化時(shí),必須制定一個(gè)被讀取的文件,如果文件不存在則會(huì)發(fā)生FileNotFoundException異常
Writer中常見(jiàn)的方法:
write() --將一個(gè)字符寫(xiě)入到流中
write(char[]) --將一個(gè)字符數(shù)組寫(xiě)入到流中
flush() --刷新流,將流中的數(shù)據(jù)刷新到目的地中,流還存在
close() --關(guān)閉資源,關(guān)閉前會(huì)先調(diào)用flush()
FileWriter除了自己的構(gòu)造函數(shù)外沒(méi)有特有的方法:
用于處理文本文件
沒(méi)有默認(rèn)的編碼表
有臨時(shí)緩沖
構(gòu)造函數(shù),在寫(xiě)入流對(duì)象初始化時(shí)必須要有一個(gè)存儲(chǔ)數(shù)據(jù)的目的地
構(gòu)造函數(shù)FileWriter(StringfileName)
在指定位置創(chuàng)建一個(gè)文件,如存在則覆蓋
FileWriter(String fileName,Boolean append) --當(dāng)傳入類型值為true時(shí),會(huì)在指定文件末尾處進(jìn)行數(shù)據(jù)的讀寫(xiě)
字符流的緩沖區(qū):
緩沖區(qū)的出現(xiàn)提高了對(duì)流的操作效率
原理:其實(shí)就是講數(shù)組進(jìn)行封裝
BufferedWriter --特有方法newLine(),跨平臺(tái)的換行符
BufferedReader --特有方法readLine(),一次讀一行,到行標(biāo)記之前的字符數(shù)據(jù)作為字符串返回,讀到末尾返回null
緩沖的存在是為了增強(qiáng)流的功能而存在,簡(jiǎn)歷緩沖必須先有流.并將流作為參數(shù)傳遞給緩沖區(qū)的構(gòu)造函數(shù)
readLine()方法原理:本質(zhì)使用read()方法,每一次讀到一個(gè)字符不進(jìn)行具體操作,先進(jìn)行臨時(shí)存儲(chǔ),讀到回車(chē)標(biāo)記時(shí),將臨時(shí)容器中存儲(chǔ)的數(shù)據(jù)一次性返回
2.字節(jié)流小節(jié): InputStream(讀) OutputStream(寫(xiě)) 可以操作任何數(shù)據(jù)類型,字符流使用char[],而字節(jié)流使用的是byte[]. 3.轉(zhuǎn)換流小結(jié):
特點(diǎn):字節(jié)流和字符流之間的橋梁,該流對(duì)象可以對(duì)讀取到的字節(jié)數(shù)據(jù)進(jìn)行指定編碼表的編碼轉(zhuǎn)換
用處:當(dāng)字節(jié)和字符之間有轉(zhuǎn)換動(dòng)作的時(shí)候,流操作的數(shù)據(jù)需要進(jìn)行編碼表的指定時(shí)
對(duì)象:
--InputStreamReader:字節(jié)到字符的橋梁
--OutputStreamWriter:字符到字節(jié)的橋梁
說(shuō)明:
--這兩個(gè)對(duì)象是字符流體系中的成員,他們有轉(zhuǎn)換的作用,而本身又是字符流,所以在new的時(shí)候需要傳入字節(jié)流對(duì)象
--轉(zhuǎn)換流中的read方法已經(jīng)融入編碼表
--操作文本文件的FileReader直接繼承InputStreamReader就可以直接操作文本問(wèn)價(jià)中的字符數(shù)據(jù)了
--FileReader操作文本文檔時(shí),使用默認(rèn)編碼表,如果需要指定編碼表,必須使用轉(zhuǎn)換流
構(gòu)造函數(shù):
--InputStreamReader(InputStream) 默認(rèn)的編碼表GBK
--InputStreamReader(InputStream,String charset) 可以通過(guò)charsetr參數(shù)指定編碼
--OutputStreamWriter(OutputStream) 默認(rèn)的編碼表GBK
--OutputStreamWriter(OutputStream,String charset) 可以通過(guò)charsetr參數(shù)指定編碼
流操作的基本規(guī)律
明確數(shù)據(jù)源(鍵盤(pán)System.in,硬盤(pán),File開(kāi)頭的流對(duì)象,內(nèi)存(數(shù)組))和數(shù)據(jù)目的(控制臺(tái)System.out,硬盤(pán),File開(kāi)頭的流對(duì)象,內(nèi)存(數(shù)組))
--其實(shí)是為了明確是輸出流還是輸入流
明確操作數(shù)據(jù)是否是純文本數(shù)據(jù)
更多內(nèi)容訪問(wèn)?java進(jìn)階_高老四