java IO流
java流操作的類和接口
java流類圖結(jié)構(gòu)
IO流的定義
流是一組有順序的埂陆,有起點和終點的字節(jié)集合润讥,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象在张。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流杭抠,流的本質(zhì)是數(shù)據(jù)傳輸泼各,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進(jìn)行數(shù)據(jù)操作履肃。
IO流的分類
- 根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流
- 根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流
字符流和字節(jié)流
字符流的由來:因為數(shù)據(jù)編碼的不同仔沿,而有了對字符進(jìn)行高效操作的流對象。本質(zhì)其實就是基于字節(jié)流讀取時尺棋,去查了指定的碼表封锉。
字節(jié)流和字符流的區(qū)別:
- 讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位膘螟,根據(jù)碼表映射字符成福,一次可能讀多個字節(jié)。
- 處理對象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片萍鲸、avi等)闷叉,而字符流只能處理字符類型的數(shù)據(jù)擦俐。
結(jié)論:只要是處理純文本數(shù)據(jù)脊阴,就優(yōu)先考慮使用字符流。 除此之外都使用字節(jié)流蚯瞧。
輸入流和輸出流
對輸入流只能進(jìn)行讀操作嘿期,對輸出流只能進(jìn)行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流埋合。
字符流與字節(jié)流轉(zhuǎn)換
轉(zhuǎn)換流的特點
其是字符流和字節(jié)流之間的橋梁
可對讀取到的字節(jié)數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字符
可對讀取到的字符數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字節(jié)
何時使用轉(zhuǎn)換流备徐?
當(dāng)字節(jié)和字符之間有轉(zhuǎn)換動作時;
流操作的數(shù)據(jù)需要編碼或解碼時甚颂。
具體的對象體現(xiàn)
InputStreamReader:字節(jié)到字符的橋梁
OutputStreamWriter:字符到字節(jié)的橋梁
這兩個流對象是字符體系中的成員蜜猾,它們有轉(zhuǎn)換作用秀菱,本身又是字符流,所以在構(gòu)造的時候需要傳入字節(jié)流對象進(jìn)來蹭睡。
RandomAccessFile類
定義
該對象并不是流體系中的一員衍菱,其封裝了字節(jié)流,同時還封裝了一個緩沖區(qū)(字符數(shù)組)肩豁,通過內(nèi)部的指針來操作字符數(shù)組中的數(shù)據(jù)脊串。
特點
該對象只能操作文件,所以構(gòu)造函數(shù)接收兩種類型的參數(shù):a.字符串文件路徑清钥;b.File對象琼锋。
該對象既可以對文件進(jìn)行讀操作,也能進(jìn)行寫操作祟昭,在進(jìn)行對象實例化時可指定操作模式(r,rw)
注意
該對象在實例化時缕坎,如果要操作的文件不存在,會自動創(chuàng)建篡悟;如果文件存在念赶,寫數(shù)據(jù)未指定位置,會從頭開始寫恰力,即覆蓋原有的內(nèi)容叉谜。可以用于多線程下載或多個線程同時寫數(shù)據(jù)到文件。
具體操作可以參考:
http://www.open-open.com/lib/view/open1454117578026.html