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

Java IO 流技術體系全景解析:字節流、字符流、處理流與序列化實戰

     編輯:Java 綜合教學

Java IO 流技術體系全景解析:字節流、字符流、處理流與序列化實戰

核心概念:流的抽象模型

Java IO 採用流(Stream)模型處理數據輸入輸出:

  • 數據源:文件、內存、網絡、數據庫、設備等
  • 流:連接程序與數據源的「管道」,連續動態的數據序列
  • 程序:通過標準 API 讀寫流

流的四維分類

維度輸入流輸出流
方向數據源 → 程序 (InputStream/Reader)程序 → 目的地 (OutputStream/Writer)
數據單元字節流(8-bit,處理二進制:圖片、視頻、所有文件)
字符流(16-bit char,處理文本,自動編碼轉換)
功能角色節點流:直接連接數據源(FileInputStream)
處理流:包裝其他流,增強功能(BufferedInputStream、DataInputStream)

字節流體系

核心類

  • FileInputStream/FileOutputStream:文件節點流
  • ByteArrayInputStream/ByteArrayOutputStream:內存字節數組流
  • BufferedInputStream/BufferedOutputStream:緩衝流,大幅提升讀寫效率(內部維護 8KB 默認緩衝區)
  • DataInputStream/DataOutputStream:按基本類型讀寫(int、double、UTF 字符串等)

標準讀取模式

try (InputStream in = new BufferedInputStream(new FileInputStream("data.bin"))) {
    byte[] buffer = new byte[1024];
    int len;
    while ((len = in.read(buffer)) != -1) {
        // 處理 buffer[0..len-1]
    }
}

字符流體系

核心類

  • FileReader/FileWriter:文件字符節點流(依賴默認編碼,生產環境不推薦)
  • InputStreamReader/OutputStreamWriter:字節→字符橋樑,可指定編碼(UTF-8/GBK)
  • BufferedReader/BufferedWriter:文本讀寫首選,支援 readLine()、newLine()
  • PrintWriter/PrintStream:格式化輸出,不拋異常,System.out 即 PrintStream

最佳實踐:指定編碼讀寫文本

// 讀取
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"))) {
    String line;
    while ((line = br.readLine()) != null) { ... }
}

// 寫入
try (BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(new FileOutputStream("out.txt"), "UTF-8"))) {
    bw.write("內容"); bw.newLine();
}

處理流進階應用

對象序列化與反序列化

  • ObjectOutputStream/ObjectInputStream:將對象圖持久化為字節序列
  • 類必須實現 Serializable 接口(標記接口,無方法)
  • transient 關鍵字排除敏感/非持久化字段
  • serialVersionUID 顯式聲明版本號,防止反序列化失效

打印流與轉換流

  • PrintWriter:println()、printf()、format(),自動 flush 選項
  • InputStreamReader/OutputStreamWriter:編碼轉換核心,解決中文亂碼根本方案

File 類:路徑抽象而非流

File 代表文件/目錄路徑,不直接讀寫數據。核心能力:路徑解析、屬性查詢(長度、權限、時間)、目錄遍歷、創建/刪除/重命名。構建 File 對象不觸發磁盤操作。

IO 模型演進:BIO → NIO → AIO

模型特點適用場景
BIO (Blocking IO)同步阻塞,一請求一線程連接數少、低併發
NIO (New IO)同步非阻塞,Channel + Buffer + Selector,一線程多路複用高併發、長連接(Netty 基石)
AIO (Asynchronous IO)異步非阻塞,回調/CompletionHandler,OS 級異步超高併發、大文件傳輸

總結與最佳實踐清單

  1. 文本處理:優先 BufferedReader/Writer + 顯式指定 UTF-8 編碼
  2. 二進制/大文件:BufferedInputStream/OutputStream + 合適緩衝區(8KB-64KB)
  3. 對象持久化:ObjectOutputStream + serialVersionUID + transient
  4. 資源管理:必須使用 try-with-resources (JDK 7+) 自動關閉流,防洩漏
  5. 高併發網絡:遷移至 NIO/AIO 或 Netty 等框架
  6. 編碼原則:字節流處理原始數據,字符流處理文本,轉換流橋接兩者
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved