java io流的学习总结~~
? ? ? ? ? ? ? ? ? ? ? ? ? ? java io流的學(xué)習(xí)總結(jié)~~
流的概念和作用
?????流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(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é)流
字符流的由來: 因?yàn)?/span>數(shù)據(jù)編碼的不同,而有了對(duì)字符進(jìn)行高效操作的流對(duì)象。本質(zhì)其實(shí)就是基于字節(jié)流讀取時(shí),去查了指定的碼表。?
字節(jié)流和字符流的區(qū)別:
- 讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符(16bit)為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié)。
處理對(duì)象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類型的數(shù)據(jù)。
- 字節(jié)流:一次讀入或讀出是8位二進(jìn)制。
字符流:一次讀入或讀出是16位二進(jìn)制。
設(shè)備上的數(shù)據(jù)無論是圖片或者視頻,文字,它們都以二進(jìn)制存儲(chǔ)的。二進(jìn)制的最終都是以一個(gè)8位為數(shù)據(jù)單元進(jìn)行體現(xiàn),所以計(jì)算機(jī)中的最小數(shù)據(jù)單元就是字節(jié)。意味著,字節(jié)流可以處理設(shè)備上的所有數(shù)據(jù),所以字節(jié)流一樣可以處理字符數(shù)據(jù)。
結(jié)論:只要是處理純文本數(shù)據(jù),就優(yōu)先考慮使用字符流。 除此之外都使用字節(jié)流。
輸入流和輸出流
輸入流只能進(jìn)行讀操作,輸出流只能進(jìn)行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。
- InputStream?是所有的輸入字節(jié)流的父類,它是一個(gè)抽象類。
- ByteArrayInputStream、StringBufferInputStream、FileInputStream?是三種基本的介質(zhì)流,它們分別從Byte 數(shù)組、StringBuffer、和本地文件中讀取數(shù)據(jù)。
- PipedInputStream?是從與其它線程共用的管道中讀取數(shù)據(jù),與Piped 相關(guān)的知識(shí)后續(xù)單獨(dú)介紹。
- ObjectInputStream?和所有FilterInputStream?的子類都是裝飾流(裝飾器模式的主角)
輸出字節(jié)流 OutputStream
- OutputStream?是所有的輸出字節(jié)流的父類,它是一個(gè)抽象類。
- ByteArrayOutputStream、FileOutputStream?是兩種基本的介質(zhì)流,它們分別向Byte 數(shù)組、和本地文件中寫入數(shù)據(jù)。
- PipedOutputStream?是向與其它線程共用的管道中寫入數(shù)據(jù)。
- ObjectOutputStream?和所有FilterOutputStream?的子類都是裝飾流。
總結(jié):
- 輸入流:InputStream或者Reader:從文件中讀到程序中;
- 輸出流:OutputStream或者Writer:從程序中輸出到文件中;
節(jié)點(diǎn)流
節(jié)點(diǎn)流:直接與數(shù)據(jù)源相連,讀入或讀出。
直接使用節(jié)點(diǎn)流,讀寫不方便,為了更快的讀寫文件,才有了處理流。
處理流
處理流和節(jié)點(diǎn)流一塊使用,在節(jié)點(diǎn)流的基礎(chǔ)上,再套接一層,套接在節(jié)點(diǎn)流上的就是處理流。如BufferedReader.處理流的構(gòu)造方法總是要帶一個(gè)其他的流對(duì)象做參數(shù)。一個(gè)流對(duì)象經(jīng)過其他流的多次包裝,稱為流的鏈接。
轉(zhuǎn)換流
InputStreamReader?、OutputStreamWriter?要InputStream或OutputStream作為參數(shù),實(shí)現(xiàn)從字節(jié)流到字符流的轉(zhuǎn)換。
構(gòu)造函數(shù)
InputStreamReader(InputStream); //通過構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認(rèn)的編碼表GBK。 InputStreamWriter(InputStream,String charSet); //通過該構(gòu)造函數(shù)初始化,可以指定編碼表。 OutputStreamWriter(OutputStream); //通過該構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認(rèn)的編碼表GBK。 OutputStreamwriter(OutputStream,String charSet); //通過該構(gòu)造函數(shù)初始化,可以指定編碼表。
實(shí)戰(zhàn)演練
- FileInputStream類的使用:讀取文件內(nèi)容
- FileOutputStream 類的使用:將內(nèi)容寫入文件
注意:
- 綜合練習(xí),實(shí)現(xiàn)復(fù)制文件,從D盤復(fù)制到E盤
總結(jié)
以上是生活随笔為你收集整理的java io流的学习总结~~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode(#26)————删除排
- 下一篇: 英雄联盟与人生奋斗的类比讨论