首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 位元組流轉字元流完全指南:InputStreamReader 與 BufferedReader 實戰

     編輯:Java 相關知識

核心問題

鍵盤輸入(System.in)是位元組流(InputStream),但我們常需要逐行讀取文字(readLine()),這是字元流(BufferedReader)的功能。如何橋接兩者?

解決方案:轉換流 InputStreamReader

InputStreamReader 是位元組流通向字元流的橋樑,它本身是字元流,建構子接受一個位元組流參數。再包裝一層 BufferedReader 即可高效逐行讀取。

完整代碼範例

import java.io.*;

public class TransStreamDemo {
    public static void main(String[] args) throws IOException {
        // 1. 獲取鍵盤輸入位元組流
        InputStream in = System.in;
        
        // 2. 位元組流 → 字元流(指定編碼更安全:new InputStreamReader(in, "UTF-8"))
        InputStreamReader isr = new InputStreamReader(in);
        
        // 3. 加入緩衝區,支援 readLine() 高效讀取
        BufferedReader br = new BufferedReader(isr);
        
        String line;
        while ((line = br.readLine()) != null) {
            if ("over".equals(line)) break; // 輸入 over 結束
            System.out.println(line.toUpperCase()); // 轉大寫輸出
        }
        br.close(); // 關閉頂層流會自動關閉底層流
    }
}

關鍵類別關係圖

System.in (InputStream)
    ↓ 包裝
InputStreamReader (Reader) — 解碼:bytes → chars (使用預設/指定 Charset)
    ↓ 包裝
BufferedReader (Reader)  — 緩衝:提供 readLine()、read(char[]) 等高效操作

進階用法:指定字元編碼

// 明確指定 UTF-8,避免平台預設編碼不一致導致亂碼
InputStreamReader isr = new InputStreamReader(System.in, StandardCharsets.UTF_8);
// 或 Java 7+
InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");

常見應用場景

  • 控制台互動程式(逐行讀取用戶輸入)
  • 讀取文字檔案(new FileReader("file.txt") 實際上內部就是 InputStreamReader + FileInputStream)
  • 網路通訊中解碼位元組流為字串

資源管理最佳實踐

// Java 7+ try-with-resources 自動關閉
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(System.in, StandardCharsets.UTF_8))) {
    String line;
    while ((line = br.readLine()) != null) {
        // 處理邏輯
    }
} // 自動關閉 br、isr、in

總結

  1. InputStreamReader:位元組流 → 字元流的核心橋樑,負責解碼
  2. BufferedReader:為字元流增加緩衝,提供 readLine() 等便利方法
  3. 實際開發中務必指定編碼(如 UTF-8),避免跨平台亂碼
  4. 善用 try-with-resources 確保資源釋放
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved