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

Java I/O 流體系深度解析:從字節到字符、從阻塞到緩衝

     編輯:Java 相關知識

Java I/O 核心架構

Java I/O 採用「裝飾者模式」設計,核心抽象為四大抽象類:

  • InputStream / OutputStream:字節流,處理二進制數據(圖片、視頻、序列化對象)。
  • Reader / Writer:字符流,處理文本數據(自動處理編碼轉換,適合中文)。

所有具體實現類均繼承自上述抽象類,通過組合實現功能疊加(如 BufferedReader 包裝 FileReader)。

核心類詳解

1. 文件操作基石:File 類

java.io.File 不屬於流,但負責文件/目錄元數據操作:創建、刪除、重命名、屬性判斷、列表獲取等。

File file = new File("data/test.txt");
file.getParentFile().mkdirs(); // 確保父目錄存在
file.createNewFile();          // 創建文件

2. 字節流體系

類別用途典型場景
FileInputStream / FileOutputStream文件字節讀寫圖片、二進制文件複製
ByteArrayInputStream / ByteArrayOutputStream內存字節數組流內存中數據暫存、轉換
DataInputStream / DataOutputStream基本類型讀寫跨平台數據交換、網絡協議
ObjectInputStream / ObjectOutputStream對象序列化/反序列化RPC、緩存持久化
BufferedInputStream / BufferedOutputStream緩衝字節流大文件讀寫性能優化

3. 字符流體系

類別用途典型場景
FileReader / FileWriter文件字符讀寫文本文件處理(默認平台編碼)
InputStreamReader / OutputStreamWriter字節轉字符橋樑指定編碼(UTF-8/GBK)讀寫
BufferedReader / BufferedWriter緩衝字符流按行讀取、高效寫入文本
PrintWriter格式化輸出日誌、報表生成

4. 隨機存取:RandomAccessFile

唯一同時實現 DataInput、DataOutput 介面的類,支援「隨機讀寫」(移動指針 seek()),適合斷點續傳、大文件修改特定位置。

try (RandomAccessFile raf = new RandomAccessFile("data.db", "rw")) {
    raf.seek(100);            // 跳到第 100 字節
    raf.writeInt(2024);       // 寫入 int
    raf.seek(0);
    System.out.println(raf.readInt());
}

緩衝流源碼核心邏輯(以 BufferedWriter 為例)

  • 內部維護 char[] cb 緩衝區(默認 8192 字符)。
  • write() 先寫入緩衝區,滿則 flushBuffer() 一次性刷入底層流。
  • newLine() 寫入系統行分隔符(System.getProperty("line.separator"))。
  • close() 先 flushBuffer() 再關閉底層流。

同理 BufferedReader 通過 fill() 批量從底層讀入緩衝區,readLine() 掃描 \n/\r 實現按行讀取。

實戰最佳實踐

  1. 資源管理:Java 7+ 強制使用 try-with-resources 自動關閉流。
  2. 編碼顯式指定:new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8) 避免亂碼。
  3. 大文件複製:Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING) (NIO.2) 或緩衝流分塊複製。
  4. 序列化版本控制:實現 Serializable 類必須顯式聲明 serialVersionUID。

總結

Java I/O 體系雖龐大,但脈絡清晰:「字節流處理二進制,字符流處理文本,緩衝流提升效能,轉換流橋接編碼」。理解裝飾者模式下的組合關係,按場景選擇合適組合,即可應對 90% 業務場景。

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