上一節,我們學習了檔案位元組輸入流的建構方法,這一節,我們繼續學習如何使用輸入流讀取位元組以及關閉流。
輸入流的目的是提供讀取來源中數據的通道,程式可以透過這個通道讀取來源中的數據,文件位元組流可以呼叫從父類繼承的read方法順序地讀取文件,只要不關閉流,每次調用read方法就順序地讀取文件中的其餘內容,直到文件的末尾或文件位元組輸入流被關閉。
位元組輸入流的read方法以位元組為單位讀取來源中的資料。
輸入流呼叫該方法從來源讀取單一位元組的數據,該方法傳回位元組值(0~255之間的一個整數),如果未讀出位元組就回傳-1。
輸入流呼叫此方法從來源試圖讀取b.length個位元組到位元組數組b中,傳回實際讀取的位元組數目。如果到達文件的末尾,則傳回-1。
輸入流呼叫此方法從來源試圖讀取len個位元組到位元組數組b中,並傳回實際讀取的位元組數目。如果到達檔案的結尾,則傳回-1,參數off指定從位元組數組的某個位置開始存放讀取的資料。
注意:FileInputStream流順序地讀取文件,只要不關閉流,每次呼叫read方法就會順序地讀取來源中其餘的內容,直到來源的末端或流被關閉。
輸入流都提供了關閉方法close() ,儘管程序結束時會自動關閉所有打開的流,但是當程式使用完流後,顯示地關閉任何打開的流仍是一個良好的習慣。如果沒有關閉那些被開啟的流,那麼就可能不允許另一個程式操作這些流所使用的資源。
例如:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){intn=-1;byte[]a=newbyte[100];try{Filef=newFile(Main.java);InputStreamin=newFileInputStream(f);while( (n=in.read(a,0,100))!=-1){Strings=newString(a,0,n);System.out.print(s);}in.close();}catch(IOExceptione) {System.out.println(FilereadError+e);}}}}
注意:當把讀入的位元組轉換為字串時,要把實際讀入的位元組轉換為字串,例如上述例子中:
Strings=newString(a,0,n);
不可寫成:
Strings=newString(a,0,100);