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

Java IO 體系深度解析(二):流類繼承層次全景圖與核心抽象

     編輯:Java 相關知識

Java IO 類層次結構全景圖(基於繼承關係)

java.lang.Object
├── InputStream (字節輸入流抽象基類)
│   ├── FileInputStream (文件字節輸入)
│   ├── PipedInputStream (管道字節輸入)
│   ├── FilterInputStream (過濾字節輸入裝飾基類)
│   │   ├── BufferedInputStream (緩沖字節輸入)
│   │   ├── LineNumberInputStream (行號字節輸入)
│   │   ├── PushbackInputStream (推回字節輸入)
│   │   └── DataInputStream (數據類型字節輸入)
│   └── SequenceInputStream (序列字節輸入)
│
├── OutputStream (字節輸出流抽象基類)
│   ├── FileOutputStream (文件字節輸出)
│   ├── PipedOutputStream (管道字節輸出)
│   ├── FilterOutputStream (過濾字節輸出裝飾基類)
│   │   ├── BufferedOutputStream (緩沖字節輸出)
│   │   ├── DataOutputStream (數據類型字節輸出)
│   │   └── PrintStream (格式化打印輸出)
│
├── Reader (字符輸入流抽象基類)
│   ├── PipedReader (管道字符輸入)
│   ├── BufferedReader (緩沖字符輸入)
│   ├── LineNumberReader (行號字符輸入)
│   ├── FilterReader (過濾字符輸入)
│   ├── InputStreamReader (字節→字符轉換橋樑)
│   │   └── FileReader (文件字符輸入)
│   └── StringReader (字符串字符輸入)
│
├── Writer (字符輸出流抽象基類)
│   ├── PipedWriter (管道字符輸出)
│   ├── BufferedWriter (緩沖字符輸出)
│   ├── FilterWriter (過濾字符輸出)
│   ├── OutputStreamWriter (字符→字節轉換橋樑)
│   │   └── FileWriter (文件字符輸出)
│   └── StringWriter (字符串字符輸出)
│
├── File (文件/目錄路徑抽象,非流)
└── RandomAccessFile (隨機訪問文件,獨立體系,實現 DataInput/DataOutput)

核心設計模式識別

模式體現類說明
裝飾者模式FilterInputStream/OutputStream、FilterReader/Writer動態添加緩沖、轉換、計數等功能
適配器模式InputStreamReader/OutputStreamWriter字節流↔字符流轉換,編碼處理
模板方法InputStream/OutputStream/Reader/Writer抽象 read()/write(),子類實現具體設備

關鍵抽象類設計意圖

  • InputStream/OutputStream:處理原始字節(圖片、視頻、二進制數據),不可直接實例化
  • Reader/Writer:處理字符文本(自動處理編碼解碼),不可直接實例化
  • File:路徑元數據操作(創建、刪除、屬性、目錄遍歷),不處理內容
  • RandomAccessFile:隨機讀寫(指針定位),融合 DataInput/DataOutput,非流體系

實際開發選型指南

場景推薦組合理由
文本文件讀取BufferedReader br = new BufferedReader(new FileReader(file))緩沖+字符流,按行高效讀取
文本文件寫入BufferedWriter bw = new BufferedWriter(new FileWriter(file))緩沖批量寫入,減少系統調用
二進制文件複製FileInputStream + FileOutputStream 或 NIO Files.copy()字節流直接操作,NIO 零拷貝更快
對象序列化ObjectOutputStream/InputStream實現 Serializable,處理對象圖
數據類型讀寫DataOutputStream/InputStream跨平台基本類型二進制格式
控制台輸出System.out (PrintStream)格式化打印,自動 flush

現代化替代:NIO.2 (Java 7+) 與 Stream API (Java 8+)

// NIO.2 文件操作(路徑、屬性、遍歷、複製、移動)
Path path = Paths.get("data.txt");
Files.lines(path).forEach(System.out::println); // 流式讀取行
Files.write(path, "content".getBytes(StandardCharsets.UTF_8));

// Stream API 處理行流
try (Stream lines = Files.lines(path)) {
    lines.filter(l -> l.contains("error"))
         .map(String::toUpperCase)
         .forEach(System.out::println);
}

總結

理解 IO 類繼承體系的關鍵在於識別:四大抽象基類定義契約,裝飾者動態增強,適配器橋接字節/字符,具體實現對接設備。實際開發中,優先使用 Buffered 包裝,文本用 Reader/Writer,二進制用 InputStream/OutputStream,複雜場景拥抱 NIO.2 與 Stream API。

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