I/O = Input / Output。程式本質:輸入數據 → 處理 → 輸出結果。數據源五花八門:檔案、網路、記憶體、鍵盤、資料庫…若每種源都學一套 API,工程師會崩潰。
流 是「有序位元組/字符序列」的抽象。JDK 將所有數據源統一轉換為流,程式只需對流讀寫,底層轉換由系統完成。
數據源 (檔案/網路/記憶體)
│
▼ 步驟1:JDK 自動完成 (程式員選類)
┌───────────────┐
│ 流對象 │ 有序位元組序列
│ InputStream │
└───────┬───────┘
│
▼ 步驟2:程式員編碼完成
read() → byte[]/char[]
│
▼
業務邏輯處理
業務邏輯生成數據
│
▼ 步驟1:程式員編碼
write(byte[]/char[]) → 流緩衝區
│
▼
┌───────────────┐
│ 流對象 │
│ OutputStream │
└───────┬───────┘
│
▼ 步驟2:JDK 自動完成 (close/flush 時)
數據源 (檔案/網路/記憶體)
| 方向 | 流類型 | 對應操作 | 核心超類 |
|---|---|---|---|
| 程式 ← 數據源 | 輸入流 | read() | InputStream / Reader |
| 程式 → 數據源 | 輸出流 | write() | OutputStream / Writer |
方向相對於當前程式:讀 = 輸入,寫 = 輸出。
FileInputStream, FileOutputStreamByteArrayInputStream, ByteArrayOutputStreamSocket.getInputStream()BufferedInputStream建立對應物件 = 完成流構造;後續只操作物件方法。
read/write API 應對所有源。
IO 入門
│
├─ 1. 掌握四大基類核心方法 (read/write/close/flush)
│
├─ 2. 熟練實體流 (File/ByteArray/Socket)
│
├─ 3. 靈活組合裝飾流 (Buffered/Data/Object/Print/橋接)
│
├─ 4. 實戰:檔案拷貝、配置讀寫、物件序列化、網路通訊
│
└─ 5. 進階:NIO (Channel/Buffer/Selector)、AIO、記憶體映射
流是 Java IO 的靈魂:**以統一序列抽象屏蔽底層異構性,以裝飾模式實現功能無限組合**。理解「流 = 有序序列 + 統一介面」,是精通 Java IO、網路程式、NIO 的基石。