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

Java IO 基礎:裝飾器模式構建靈活流管道

     編輯:Java 程式設計入門

Java IO 以裝飾器模式著稱:雖啟動代碼較繁瑣,但賦予開發者對讀寫全鏈路的精細控制,實現功能模塊化自由組合。

經典範例:緩衝讀取文本文件

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("IO Problem: " + e.getMessage());
        }
    }
}

數據流向:FileReader → BufferedReader → 應用

裝飾器鏈路拆解

  1. FileReader:節點流,讀取文件字節 → 轉換為字符流(默認 UTF-8/平台編碼)。
  2. BufferedReader:裝飾器,包裝 FileReader,在內存開闢緩衝區(默認 8KB),提供 readLine() 等高級讀取方法,減少系統調用,大幅提升性能。
  3. 調用 br.readLine() 時,若緩衝區無數據,底層自動從 FileReader 讀取填充。

裝飾器優勢:同一 BufferedReader 可裝飾標準輸入、網絡流、管道流等任意 Reader,緩衝邏輯復用極致。

更多組合:拆解讀取與轉換

FileInputStream → InputStreamReader → BufferedReader

// 精確控制編碼、字節讀取策略
InputStream is = new FileInputStream("data.bin");
Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(reader);

FileReader 內部固化編碼與緩衝策略;拆分組合則可:指定編碼、自定義緩衝區大小、插入解密/解壓流等。

四大基類族系與選型指南

java.io 繼承體系

基類數據類型典型子類適用場景
InputStream字節流FileInputStream, ByteArrayInputStream, GZIPInputStream二進制數據:圖片、視頻、序列化對象、壓縮流
OutputStream字節流FileOutputStream, ByteArrayOutputStream, GZIPOutputStream同上,寫入
Reader字符流FileReader, BufferedReader, InputStreamReader文本數據:日志、配置、JSON、XML
Writer字符流FileWriter, BufferedWriter, OutputStreamWriter同上,寫入

橋接關鍵:InputStreamReader(字節→字符)、OutputStreamWriter(字符→字節),指定 Charset 避免亂碼。

壓縮文件讀取整數示例

GZIPInputStream → DataInputStream 讀取壓縮整數

try (DataInputStream dis = new DataInputStream(
        new GZIPInputStream(new FileInputStream("numbers.gz")))) {
    while (true) {
        int num = dis.readInt(); // 直接讀取 int
        System.out.println(num);
    }
} catch (EOFException e) {
    // 正常讀完結束
}

寫入文本:對稱的裝飾鏈

try (BufferedWriter bw = new BufferedWriter(
        new FileWriter("output.txt", StandardCharsets.UTF_8))) {
    bw.write("Thank you for your fish.");
    bw.newLine(); // 跨平台換行
}

Java IO 核心心法:節點流接源/終點,處理流加能力,裝飾器自由組合。JDK 7+ try-with-resources 強制關閉資源;NIO.2 (Files, Path) 提供更現代、高性能、函數式 API,新項目優先考慮。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved