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

Java IO 體系全景圖:Input/Output 類別繼承架構速查

     編輯:Java 相關知識

Java IO 設計核心:裝飾者模式

Java IO 採用「節點流 + 處理流」分層,以 裝飾者模式 動態組合功能:

  • 節點流:直接操作資料源(檔案、網路、記憶體、陣列)。
  • 處理流:包裝節點流,提供緩衝、轉碼、物件序列化、資料型別讀寫等增強。

輸入體系 (Input) 類別圖

Java Input 類別繼承圖

關鍵抽象基類

  • InputStream(位元組輸入) → FileInputStream, ByteArrayInputStream, PipedInputStream
  • Reader(字元輸入) → InputStreamReader(位元組轉字元橋樑), FileReader, BufferedReader

常用處理流組合

// 位元組緩衝 + 資料型別讀取
DataInputStream dis = new DataInputStream(
    new BufferedInputStream(
        new FileInputStream("data.bin")));

// 字元緩衝逐行讀取(推薦)
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(new FileInputStream("log.txt"), StandardCharsets.UTF_8))) {
    String line;
    while ((line = br.readLine()) != null) { ... }
}

輸出體系 (Output) 類別圖

Java Output 類別繼承圖

關鍵抽象基類

  • OutputStream(位元組輸出) → FileOutputStream, ByteArrayOutputStream, PipedOutputStream
  • Writer(字元輸出) → OutputStreamWriter, FileWriter, BufferedWriter, PrintWriter

常用處理流組合

// 字元緩衝 + 自動 flush + UTF-8
try (PrintWriter pw = new PrintWriter(
        new BufferedWriter(
            new OutputStreamWriter(new FileOutputStream("out.txt"), StandardCharsets.UTF_8)), true)) {
    pw.println("Hello World");
}

NIO.2 (Java 7+) 現代化替代

新專案優先考慮 java.nio.file.Files + Path:

  • 小檔案一次讀寫:Files.readAllLines(path, UTF_8) / Files.write(path, lines, UTF_8)
  • 大檔案串流:Files.newBufferedReader(path, UTF_8) / Files.newBufferedWriter(path, UTF_8)
  • 目錄遍歷:Files.walk(path) / Files.find()
  • 屬性操作:Files.getLastModifiedTime(path), Files.setPosixFilePermissions()

效能與選型速查表

場景推薦組合備註
文字檔逐行讀取BufferedReader + InputStreamReader(UTF-8)取代 FileReader(無法指定編碼)
二進位大檔複製FileChannel.transferTo/From零拷貝,最快
物件序列化ObjectOutputStream / ObjectInputStream注意 serialVersionUID
高併發日誌寫入Log4j2/Logback AsyncAppender勿手寫 PrintWriter
記憶體資料互轉ByteArrayInputStream / ByteArrayOutputStream單元測試常用

最佳實務提醒

  1. try-with-resources (Java 7+) 自動關閉,杜絕資源洩漏。
  2. 明確指定 StandardCharsets.UTF_8,避免平台預設編碼差異。
  3. 大量寫入必加 BufferedOutputStream/Writer,減少系統呼叫。
  4. 網路/管道流需處理「斷訊/半包」邏輯,單純 IO 類別不保証訊息邊界。

熟悉 IO 體系繼承關係與裝飾組合,即可針對任何資料源選出最高效、最安全的讀寫策略。

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