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

Java I/O 流體系全景圖:InputStream/OutputStream 體系、裝飾者模式、文件與管道操作詳解

     編輯:Java 綜合教學

Java I/O 流體系全景圖:InputStream/OutputStream 體系、裝飾者模式、文件與管道操作詳解

Java I/O 採用裝飾者模式靈活組合功能。本文系統梳理位元組流與字符流體系、核心子類功能、典型組合場景。

一、位元組流體系

InputStream(輸入流抽象基類)

數據源:位元組數組、String、文件、管道、序列流

子類功能構造參數
ByteArrayInputStream內存緩衝區作為輸入源byte[]
StringBufferInputStreamString 轉輸入流(已棄用)String
FileInputStream文件讀取File/String/FileDescriptor
PipedInputStream管道輸入端,配合 PipedOutputStreamPipedOutputStream
SequenceInputStream合併多個 InputStreamEnumeration / 兩個流
FilterInputStream裝飾者基類,提供增強功能InputStream

FilterInputStream 主要裝飾者

裝飾者功能
DataInputStream讀取基本類型(int、long、UTF 字符串),配合 DataOutputStream
BufferedInputStream緩衝讀取,減少物理 I/O 次數
LineNumberInputStream追蹤行號(已棄用,用 LineNumberReader)
PushbackInputStream支持退回一個位元組

OutputStream(輸出流抽象基類)

子類功能構造參數
ByteArrayOutputStream內存緩衝區輸出初始容量
FileOutputStream文件寫入File/String/FileDescriptor + append 模式
PipedOutputStream管道輸出端PipedInputStream

FilterOutputStream 主要裝飾者

裝飾者功能
DataOutputStream寫入基本類型,配合 DataInputStream
PrintStream格式化輸出(print/println),System.out 即此類
BufferedOutputStream緩衝寫入,需手動 flush()

二、字符流體系(Reader/Writer)

處理文本數據,自動處理編碼轉換,核心類:FileReader/Writer、BufferedReader/Writer、InputStreamReader/OutputStreamWriter(位元組↔字符橋樑)、PrintWriter。

三、典型組合模式

// 緩衝文本讀取(推薦)
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = br.readLine()) != null) { System.out.println(line); }
}

// 數據流持久化
try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.bin")))) {
    dos.writeInt(123);
    dos.writeUTF("Hello");
}

// 管道通信(線程間)
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream(pos);
// 線程 A 寫 pos,線程 B 讀 pis

四、關鍵設計模式:裝飾者模式

  • Component:InputStream/OutputStream
  • ConcreteComponent:FileInputStream 等
  • Decorator:FilterInputStream/FilterOutputStream
  • ConcreteDecorator:BufferedInputStream、DataInputStream 等

優勢:動態組合功能,避免繼承爆炸,單一職責。

五、常見錯誤與最佳實踐

  1. 忘記 close() → 使用 try-with-resources (Java 7+)
  2. 字符流未指定編碼 → 顯式使用 StandardCharsets.UTF_8
  3. 大文件未緩衝 → 必須套用 BufferedInputStream/Reader
  4. 頻繁 flush() → 批量寫入後統一 flush
  5. NIO.2 (Files, Paths) 替代傳統 I/O 簡化代碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved