java輸入輸出10:IO流(IO流概述及其分類)
阿新 • • 發佈:2018-11-17
1 概念
1、IO流用來處理裝置之間的資料傳輸。
2、Java對資料的操作時通過流的方式。
3、Java用於操作流的類都在IO包中。
4、流按流向分為兩種:輸入流,輸出流。
5、流按照操作型別分為兩種:(1)位元組流:位元組流可以操作任何資料,因為在計算機中任何資料都是以位元組的形式儲存的。(2)字元流:字元流只能操作純字元資料,比較方便。
2 IO流常用父類
(1)位元組流的抽象父類:
1、InputStream
2、OutputStream
(2)字元流的抽象父類:
1、Reader
2、Writer
java的輸入流主要由InputStream和Reader作為基類,而輸出流則主要由OutputStream和Writer作為基類。它們都是一些抽象基類,無法直接建立物件。
位元組流和字元流的用法幾乎是完全相同的,其區別在於他們的讀取資料單元不同,位元組流操作的資料單元是8位的位元組,字元流操作的資料單元是16位的字元。
3 IO程式書寫
1、使用前,匯入IO包中的類。
2、使用時,進行IO異常處理。
3、使用後,釋放資源。
演示:
package filePackage; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Demo3_FileInputStream { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("C:\\demoFile1\\file.txt");//建立流物件 /*int a = fis.read();//從硬碟上讀取一個位元組 System.out.println(a); int b = fis.read(); System.out.println(b); int c = fis.read(); System.out.println(c); */ int m; while((m = fis.read()) != -1) { System.out.print(m + "\t"); } fis.close();//關閉流釋放資源 } }
file.txt檔案內容為:abc
執行結果如下:
4 IO流read()方法返回值為什麼是int
read()方法讀取的是一個位元組,為什麼返回是int,而不是byte?
因為位元組輸入可以操作任意型別的檔案,比如圖片音訊等,這些檔案底層都是以二進位制形式儲存的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到11111111(補碼),那麼11111111是byte型別的-1,程式遇到-1就會停止讀取,後面的資料就無法讀取到。而在讀取的時候用int型別接收,如果11111111會在其前面補上24個0湊足4個位元組,那麼byte型別的-1就變成int型別的255了這樣可以保證整個資料讀完,而結束標記的-1就是int型別。