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 輸出流 源地寫出到檔案,網路,壓縮包或其它資料輸出...