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