流,其實(shí)是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進(jìn)行數(shù)據(jù)操作。按照不同的劃分標(biāo)準(zhǔn),可以分為字符流和字節(jié)流、輸入流和輸出流。
由于因?yàn)閿?shù)據(jù)編碼的不同,而有了對(duì)字符進(jìn)行高效操作的流對(duì)象,這就是字符流。字符流本質(zhì)其實(shí)就是基于字節(jié)流讀取時(shí),去查了指定的碼表。字節(jié)流和字符流的區(qū)別:
1)讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié);
2)處理對(duì)象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類型的數(shù)據(jù);
3)字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)的,是文件本身的直接操作的;而字符流在操作的時(shí)候下后是會(huì)用到緩沖區(qū)的,是通過(guò)緩沖區(qū)來(lái)操作文件。
設(shè)備上的數(shù)據(jù)無(wú)論是圖片或者視頻,文字,它們都以二進(jìn)制存儲(chǔ)的,所以字節(jié)流可以處理設(shè)備上的所有,在開(kāi)發(fā)中字節(jié)流使用廣泛。
Java語(yǔ)言定義了許多類專門負(fù)責(zé)各種方式的輸入或者輸出,這些類都被放在java.io包中。其中,所有輸入流類都是抽象類InputStream(字節(jié)輸入流),或者抽象類Reader(字符輸入流)的子類;而所有輸出流都是抽象類OutputStream(字節(jié)輸出流)或者Writer(字符輸出流)的子類。
InputStream類是字節(jié)輸入流的抽象類,Reader類是字符輸入流的抽象類,OutputStream類是字節(jié)輸入流的抽象類,Writer類是字符輸出流的抽象類,F(xiàn)ile類是IO包中唯一代表磁盤文件本身的對(duì)象。對(duì)輸入流只能進(jìn)行讀操作,對(duì)輸出流只能進(jìn)行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。
io