程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程那些事兒91——裝飾流使用2

Java編程那些事兒91——裝飾流使用2

編輯:關於JAVA

11.3.3.2 BufferedReader/BufferedWriter

在進行IO操作時,除了功能以外,程序的執行效率也是必須要考慮的問題。基本的IO類只是注重功能的實現,例如將特定的數據源轉換為流對象,而沒有過多的關注讀寫的效率問題,而實際在進行項目開發時,讀寫效率也是必須要考慮的問題。

為了提高IO類的讀寫效率,在裝飾流中專門制作了一類緩沖流,該類流的作用就是提高流的讀寫效率,這組緩沖流包含:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferedWriter。

該部分以BufferedReader/BufferedWriter為基礎進行介紹。

由於前面介紹DataInputStream/DataOutputStream時,是以文件流作為實體流進行介紹,這裡就不再重復了,這裡以前面介紹的接收控制台輸入為基礎介紹緩沖輸入流的使用。

由於裝飾流在進行嵌套時,只能嵌套相同類型的流,例如InputStream類型的流之間可以嵌套,但是InputStream和Reader兩個體系之間的流就無法直接嵌套,為了使用新的IO類帶來的特性,在IO類中提供了兩個專門的類,實現體系之間的轉換,這兩個流類被形象的稱為“橋接流”。

橋接流主要包含2個,依次是:

1、InputStreamReader

該類實現將InputStream及其子類的對象轉換為Reader體系類的對象,實現將字節輸入流轉換為字符輸入流。

2、OutputStreamWriter

該類實現將OutputStream及其子類的對象轉換為Writer體系類的對象,實現將字節輸入流轉換為字符輸入流。

這兩個橋接流使得字節流可以被轉換為字符流,但是需要注意的是,字符流無法轉換為字節流。

在讀取控制台輸入時,直接使用System.in進行讀取,雖然在功能上可以實現,但是這種方式讀寫流的效率比較差,所以在實際使用時一般需要提高讀寫的效率,這就需要使用裝飾流中的緩沖流,這是一個典型的流的嵌套的示例。該代碼實現的功能是如果回顯用戶輸入,當用戶輸入quit時程序退出。該示例的代碼如下:

import java.io.*;
/**
* 使用BufferedReader讀取控制台輸入
*/
public class ReadConsoleWithBuffer {
 public static void main(String[] args) {
  BufferedReader br = null;
  String s = null;
  try{
    //使用流的嵌套構造緩沖流
    br = new BufferedReader(
    new InputStreamReader(System.in));
    do{
     //輸出提示信息
     System.out.println("請輸入:");
     //按行讀取輸入
     s = br.readLine();
     //輸出用戶輸入
     System.out.println(s);
    }while(!s.equals("quit"));
  }catch(Exception e){
    e.printStackTrace();
  }finally{
    try{
      br.close();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
 }
}

在該示例代碼中,首先使用流的嵌套構建了BufferedReader類型的對象br,然後使用BufferedReader中的readLine方法,每次讀取用戶輸入的一行信息,使用readLine方法讀取內容時,系統以”\r\n”作為每次的結束符號,而且讀取的內容不包含”\r\n”,當讀取到流的末尾時readLine方法的返回值是null。然後使用do-while循環判斷用戶輸入的是否是quit,如果輸入的是quit,則程序結束,否則繼續下一次循環。

關於BufferedWriter的使用,沒有什麼特別的地方,這裡就不單獨舉例說明了。

11.3.3.3 裝飾流小結

前面介紹了兩類比較常見的裝飾流,在實際的開發中,根據邏輯的需要還可能會用到其它的裝飾流,這些裝飾流的使用和前面介紹的類類似,在實際使用時通過查閱JDK API文檔找到根據功能找到合適的裝飾流,然後進行使用即可。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved