1. 程式人生 > >簡單認識java裡面的流

簡單認識java裡面的流

1.簡單認識java裡面的流結構

在java裡面通過流對來實現對檔案,磁碟,記憶體進行讀取,這裡以為流的形式比較多,所以主要寫一下一些常用流的用法。

分析:通過原始碼可以看出,java的設計者定義兩個抽象類,分別作為輸出流和輸入流。但是有個問題是,(為什麼不直接用介面)

然後其他流來分別繼承這兩個抽象類。

2. FileInputStream類的使用

分析:大家可以看到read()方法的返回值是int型別為-1,那麼為什麼是-1呢?,主要因為byte的取值範圍是-128-127之間,如果返回-1的話,不知道里面內容是否讀取完畢,但是如果返回int型別的-1,那麼會把高位進行補0,然而int的取值範圍是0-255,所以如果返回-1型別,說明檔案裡面的內容讀取完畢。

3.FileOutputStream類的使用

分析:通過上述可以看出主要是,建立一個輸出通道,但是如果我們的檔案沒有建立,那麼FileOutputStream這個類會幫助我們進行建立檔案,FileOutputStream和FileInputStream在一起聯合應用。

4.FileOutputStream和FileInputStream的聯合使用

分析:從上述可以看出主要有三種方式,來實現對FileInputStream和FileOutStream的使用,第一種方式就是讀一個位元組,寫一個位元組,但是問題是讀的時候是把byte轉化為int型別,寫的時候有把int型別轉化為byte型別,這樣會不會損失精度

。第二種方式是使用byte陣列,這樣比第一種方式快,第三種就是使用BufferInputStream來讀取資訊,從原始碼來看,它裡面也是一個數組,不過它一次性好像要讀取8192個位元組。

分析:通過上述可以發現流的使用主要通過和檔案結合在一起使用,那麼問題來了,在專案中發現大部分在進行檔案操作時,都使用的是遞迴進行操作,這樣會不會帶來效能上的問題?

5.切記關閉流

分析:如果我們打開了流的操作,一定要記得關閉流,應該在finally塊寫對流的關閉,因為發生異常時,我們也可以關閉流,那麼有人會說在finally塊裡面什麼不把兩個輸出流和輸入流寫下一個try塊裡面,而寫在兩個try塊裡面,假如在第一個try塊出現異常,那麼第二個try塊也會正常關閉。