輸入輸出流的初步理解

2021-09-21 17:53:13 字數 2896 閱讀 9403

1.什麼是輸入輸出

輸入輸出的物件是資料,資料的儲存區域是光碟或者磁碟等裝置,還有乙個儲存資料的空間-------記憶體,其中磁碟的速度比較慢,記憶體的速度比較快,把資料讀入記憶體的動作稱作輸入,把資料從記憶體存入磁碟的動作稱作輸出

2.流的分類

流向分類:輸入流和輸出流

按照資料內容:位元組流(能處理位元組的流物件)、字元流(能處理字元的流物件)

**字元流的實質:**位元組流讀取文字位元組資料後,不直接操作而是先查指定的編碼表,獲取對應的文字,對文字進行操作,簡單說,字元流=位元組流+編碼表。

3、常用基類;

位元組流常用基類:

inputstream

outputstream

字元流常用基類:

reader

writer

二、示例:

1、filewriter的使用:

建立相應的流----需要指定操作的路徑,要操作什麼檔案new filewriter(string filename)(使用這個方法建立流,若是所指定的目錄下沒有該檔案,則會建立,若是已存在,則會覆蓋);

對檔案進行寫入操作(呼叫write方法);

呼叫flush方法,把寫入緩衝區的內容沖刷到檔案中(呼叫write(string content)方法寫入的時候其實是把內容寫入到了緩衝區中,磁碟中的檔案事實上並不存在該內容)。

關閉流(呼叫colose方法----事實上呼叫colose方法會自動對緩衝區進行沖刷,把緩衝區的內容寫入文字)

呼叫flush方法和呼叫colose方法的區別:呼叫flush方法之後還可以繼續寫入,而colose之後無法繼續寫入,反而會丟擲io異常。

filewriter filewriter = null;

try catch (ioexception e) finally catch (exception e)

}
****解析:**先建立乙個filewriter,這個類主要用來建立字元流,對檔案進行操作。在io操作當中我們經常會遇上ioexception異常,因此我們需要捕獲異常。另外,建立乙個流進行對檔案操作呼叫了作業系統的資源,在使用完畢之後需要對有限的作業系統資源進行釋放,否則會導致系統資源被耗盡。所以在finally中需要呼叫close方法,同時,clos方法也是可能產生異常的,因此要進行捕獲,而判斷filewriter不能為null的原因是filewriter在建立的時候就有可能失敗(可能出現找不到相應的路徑,例如指定不存在的磁碟)。

2、fileread的使用:

建立相應的流----需要指定操作的路徑,要操作什麼檔案filereader(string filename)(使用這個方法建立流,若是所指定的目錄下沒有該檔案,則會建立,若是已存在,則會覆蓋);

對檔案進行讀取操作(呼叫read方法,這個方法是返回乙個int值,該值表示的是unicode的碼元----0~65535之間的整數);

注意:因為返回的是碼元,所以如果要列印出來成字元,需要強制轉換成char型別的再輸出,而在使用filewriter的write方法的時候可以直接使用返回的碼元進行寫入。

呼叫flush方法,把寫入緩衝區的內容沖刷到檔案中(呼叫write(string content)方法寫入的時候其實是把內容寫入到了緩衝區中,磁碟中的檔案事實上並不存在該內容)。

關閉流(呼叫colose方法----事實上呼叫colose方法會自動對緩衝區進行沖刷,把緩衝區的內容寫入文字)

呼叫flush方法和呼叫colose方法的區別:呼叫flush方法之後還可以繼續寫入,而colose之後無法繼續寫入,反而會丟擲io異常。

filereader filereader = null;

try } catch (ioexception e) finally catch (exception e)

}
}

以下是輸出成果:

disconnected from the target vm, address: 『127.0.0.1:36988』, transport: 『socket』

eke test

process finished with exit code 0

3、改進:

使用char陣列來一次性讀取多個字元:

char contentarray = new char[1024];

int charunit = 0;

while ((charunit = filereader.read(contentarray)) != -1)

如上**中的read方法使用了引數char contentarray;該方法返回的是讀取的個數,並且把讀取到的字元插入到contentarray陣列中。

4、filewriter與filereader的聯合使用----複製

filereader filereader = null;

filewriter filewriter = null;

try 

} catch (ioexception e) finally catch (exception e)

}if (filewriter != null) catch (exception e) }}

filereader reader = null;

try

} catch (ioexception e) finally catch (ioexception e)

}}

關於輸入輸出流的理解

前面學習jdk的時候,真的沒理解輸入輸出流的概念,今天上網看了別人的理解,覺得受益非淺,為了以後方便我也把我的理解記錄了下來.主要是從記憶體 磁碟 終端 螢幕 鍵盤 網路之間的闡述。程式操作的資料都應該是在記憶體裡面,記憶體是你操作的主物件,把資料從其他資源裡面傳送到記憶體裡面,就是輸入,反之,把資...

c 輸入輸出流的理解

1 先看流的概念 c 的流是zhidao一種資料的載體,通過它可以實現資料交換和傳輸。就像水流是一串水組成的,c 的資料流就是由一串資料組成的東西。2 輸入輸出流 在c 程式中,資料可以從程式流向螢幕或磁碟檔案,稱為輸出流 也可以從鍵盤或磁碟檔案流入到程式中,稱為輸入流。3 在c 中,資料的輸入和輸...

輸入輸出流的簡單理解

變數,陣列和物件中儲存的資料是暫時存在的,程式結束它們就會丟失.為了能夠永久的儲存程式建立的資料,需要將它們儲存在磁碟檔案中,這樣i o技術就產生了 輸入流 從檔案,網路,壓縮包或其它資料來源寫入記憶體中目的地 inputstream,reader 輸出流 源地寫出到檔案,網路,壓縮包或其它資料輸出...