1. 程式人生 > >java中的緩衝輸入流學習總結

java中的緩衝輸入流學習總結

一、基本內容

   在JDK1.5之前,BufferedReader是一個非常重要的資料讀取的操作類,如果要進行輸入流的操作,尤其是檔案操作,都建議使用BufferedReader類使用。

   BufferedReader類屬於Reader的子類,負責進行緩衝區的讀取,由於其本身屬於字元輸入流,所以更加適合輸入中文文字資訊。

二、BufferedReader類的繼承結構圖:

這裡寫圖片描述

  在BufferedReader類中提供有兩個重要的方法

  • 構造方法:public BufferedReader(Reader in);
  • 資料讀取方法:public String readLine() throws IOException
    (非常重要的方法)

範例:BufferedReader實現資料的輸入。
分析:
資料輸入要使用System.in,而System.in是InputStream型別。
BufferedReader類的構造需要接收Reader型別,那麼需要將位元組輸入流變為字元輸入流,使用InputStreamReader

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io
.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; public class CopyDemo { public static void main(String[] args) throws Exception { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in
)); System.out.println("請輸入資訊: "); String str = buf.readLine(); System.out.println("輸入資訊為: "+str); } }

以上的程式碼已經成功的實現了鍵盤輸入資料,並且也可以直接按照字串返回,不過這種例項化物件進行中的操作是不可取的。

先在有了BufferedReade類物件,那麼之後就可以進行一些輸入驗證的操作了。
比如說:要求輸入年齡,如果輸入的不是數字,則提示錯誤。

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        boolean flag = true;
        while(flag) {
        System.out.println("請輸入年齡: ");
        String str = buf.readLine();
        if(str.matches("\\d+")) {
        System.out.println("輸入年齡為: "+Integer.parseInt(str));
        flag = false;
        }else {
            System.out.println("請輸入正確的年齡資訊。");
            }
        }
    }
}

以上的兩個範例都是圍繞著鍵盤輸入資料的操作進行的,不過使用BufferedReader類還有一個好處是可以進行大文字的讀取。
範例:利用BufferedReader讀取檔案的資訊。

package lisy;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        BufferedReader buf = new BufferedReader(new FileReader(new File("E:" + File.separator + "my.txt" )));
        String string = null;
        while((string = buf.readLine()) != null) {
        System.out.println(string);
        }
        buf.close();
    }
}

雖然BufferedReader 類比較好用,但是在輸入資料的時候已經不是首選了。而是次要的選擇。