字符流以字符爲單位,根據ASCll碼錶映射字符,一次可能讀多個字節,只能處理字符類型的數據。html
同類 InputStream 和 OutputStream 同樣,Reader 和 Writer 也是抽象類,只提供了一系列用於字符流處理的接口。它們的方法與類 InputStream 和 OutputStream 相似,只不過其中的參數換成字符或字符數組java
Reader類的方法:數組
Writer類的方法:學習
InputStreamReader 和 OutputStreamWriter 是 java.io 包中用於處理字符流的最基本的類,用來在字節流和字符流之間做爲中介:從字節輸入流讀入字節,並按編碼規範轉換爲字符;往字節輸出流寫字符時先將字符按編碼規範轉換爲字節。使用這二者進行字符處理時,在構造方法中應指定必定的平臺規範,以便把以字節方式表示的流轉換爲特定平臺上的字符表示。
編碼
InputStreamReader(InputStream in); //缺省規範說明 //指定規範 enc InputStreamReader(InputStream in, String enc); OutputStreamWriter(OutputStream out); //缺省規範說明 //指定規範 enc OutputStreamWriter(OutputStream out, String enc);
若是讀取的字符流不是來自本地時(好比網上某處與本地編碼方式不一樣的機器),那麼在構造字符輸入流時就不能簡單地使用缺省編碼規範,而應該指定一種統一的編碼規範「ISO 8859_1」,這是一種映射到 ASCCII 碼的編碼方式,可以在不一樣平臺之間正確轉換字符。code
InputStreamReader ir = new InputStreamReader(is,"8859_1");
爲了提升字符流處理的效率,java.io 中也提供了緩衝流BufferedReader和BufferedWriter。除了提供read()和writer()方法,還提供處理整行字符的方法:htm
一、public String readLine():BufferedReader 的方法,從輸入流中讀取一行字符,行結束標誌\n、\r或者二者一塊兒(這是根 據系統而定的)blog
二、public void newLine():BufferedWriter 的方法,向輸出流中寫入一個行結束標誌,它不是簡單地換行符\n或\r,而是系統定 義的行隔離標誌(line separator)。接口
代碼示例:get
package ioTest; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; public class FileToUnicode { /** * @param args */ public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("1.txt"); InputStreamReader dis = new InputStreamReader(fis); BufferedReader br = new BufferedReader(dis); String s; //每次讀取一行,當下一行爲空時結束 while((s = br.readLine()) != null){ System.out.println(s); } dis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
參考連接:
Java IO流學習總結:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html