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