這段時間學習JAVA的流類,感覺各種流五花八門看得眼花,特此簡單整理。
JAVA的I/O流庫提供大量的流類(java.io)。其中,所有輸入流是抽象類InputStream(字節輸入流)或抽象類Reader(字符輸入流)的子類,而所有的輸出流類都是抽象類OutputStream(字節流)和抽象類Write(字符流)的子類。
字節流:
- FileInputSrteam
功能為從文件中以字節的形式讀取數據,利用 .read()方法將讀取的字節返回,終止標志為-1返回值。
- FileOutputstream
功能為將內存中的數據以字節流的形式送到目標文件,利用 .write(byte [] b)方法輸送字節到數組b,
- System.in
一個很原始的字節流(個人感情因素。。。),是System的一個類成員,原型為
public final static InputStream in = nullInputStream();
指向的源為標準輸入:鍵盤
- System.out
同樣是一個很原始的字節流。。。。
public final static PrintStream out = nullPrintStream();
輸出的目的地是屏幕文本
字符流:
字節流本身的局限性是不能直接操作Unicode字符,例如漢字是占用兩個字節空間,使用字節流讀取不當有可能發生亂碼現象。因此JAVA提供了比較高級的字符流來處理,在Unicode中一個漢字占據一個字符,因此可以保證正確處理。
- FileReader
抽象類Reader的子類,從制定目標按字符讀取數據,順序讀取文件中的字符直至流關閉。
public class FileReader extends InputStreamReader
- FileWrite
抽象類Write的子類,以字符形式輸送數據到目的地直至流關閉。
public class FileWriter extends OutputStreamWriter
-------------------------------------------------------------------------------------
System.in是指向鍵盤的字節輸入流,如果我們需要從鍵盤讀取字符,可以在.in流上“套一根管子”。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 利用.in來構造一個字符流的“管子”。這樣從鍵盤就能以字符的形式讀入數據。