IO高級應用-BufferedReader

緩衝輸入流

  1. 字符緩衝區流:BufferedReader、BufferedWriter;
  2. 字節緩衝區流:BufferedInputStream、BufferedOutputStream;

重點講解BufferedReader

java.lang.Object
繼承者 java.io.Reader
繼承者 java.io.BufferedReader

public class BufferedReader extends Reader
從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取。

構造方法摘要
BufferedReader(Reader in)
創建一個使用默認大小輸入緩衝區的緩衝字符輸入流。
BufferedReader(Reader in, int sz)
創建一個使用指定大小輸入緩衝區的緩衝字符輸入流。
參數信息:
in - 一個 Reader
sz - 輸入緩衝區的大小

public class InputStreamReader extends Reader
InputStreamReader 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。
每次調用 InputStreamReader 中的一個 read() 方法都會導致從底層輸入流讀取一個或多個字節。要啓用從字節到字符的有效轉換,可以提前從底層流讀取更多的字節,使其超過滿足當前讀取操作所需的字節。
爲了達到最高效率,可要考慮在 BufferedReader 內包裝 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

鍵盤數據輸入的標準格式:

package com.jluzh.system;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReadTest {
    public static void main(String[] args) throws Exception {
        //java.io.BufferedReader.BufferedReader(Reader in)
        //java.io.InputStreamReader.InputStreamReader(InputStream in)將字節流轉爲字符流
        //InputStream java.lang.System.in
        //BufferedReader的構造方法接收的是Reader對象,而InputStreamReader接收的是InputStream對象
        //而System .in正好是InputStream對象,且InputStreamReader可以向上轉型爲Reader對象
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("請輸入數據:");
        String str = buf.readLine();//以回車作爲換行
        System.out.println("輸入的內容爲:"+str);
    }
}

主要用於解決System.in 中文亂碼的問題

使用BufferedRead的主要原因:其可以實現字符串數據的接收,所以現在可以基於正則進行判斷
判斷輸入內容

package com.jluzh.system;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BufferedReadTest2 {
    public static void main(String[] args) throws Exception {
        //java.io.BufferedReader.BufferedReader(Reader in)
        //java.io.InputStreamReader.InputStreamReader(InputStream in)
        //InputStream java.lang.System .in
        //BufferedReader的構造方法接收的是Reader對象,而InputStreamReader接收的是InputStream對象
        //而System .in正好是InputStream對象,且InputStreamReader可以向上轉型爲Reader對象
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        boolean flag = true;//用於循環邏輯
        while(flag){
            System.out.println("請輸入年齡:");
            String str = buf.readLine();//以回車作爲換行
            if(str.matches("\\d{1,3}")){
                //輸入數據由數字組成
                System.out.println("年齡是:"+Integer.parseInt(str));
                flag = false;//退出循環
            }else{
                System.out.println("年齡輸入錯誤,應該由數字組成或在三位數。");
            }
        }
    }
}

除了可以接收輸入信息之外,也可以利用緩衝區讀取進行文件的讀取
與直接使用InputStream(Reader)類相比,使用BufferedReader在進行文件信息讀取的時候回更加的方便.
例子:

package com.jluzh.system;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class BufferedReaderTest3 {
    public static void main(String[] args) throws Exception {
        File file = new File("E:"+File.separator+"IOtest"+File.separator+"BufferesReaderTest3.txt");
        if(!file.exists()){
            //如果讀取的源文件不存在
            System.out.println("讀取的源文件不存在!");
            System.exit(1);//程序退出執行
        }
        BufferedReader buf = new BufferedReader(new FileReader(file));
        String str = null;
        while((str = buf.readLine())!=null){
            System.out.println(str);
        }
        buf.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章