IO (Input/Output) 是程式與外部 (檔案、網路、主控台、裝置) 交換資料的介面。Java 核心庫提供兩套體系:
InputStream (抽象) OutputStream (抽象)
↑ ↑
FileInputStream FileOutputStream -- 資料源節點
ByteArrayInputStream ByteArrayOutputStream
PipedInputStream PipedOutputStream
FilterInputStream FilterOutputStream -- 裝飾者基類
↑ ↑
BufferedInputStream BufferedOutputStream -- 緩衝裝飾
DataInputStream DataOutputStream -- 基本型別讀寫裝飾
ObjectInputStream ObjectOutputStream -- 物件序列化裝飾
GZIPInputStream GZIPOutputStream -- 壓縮裝飾
CipherInputStream CipherOutputStream -- 加密裝飾
// 需求:帶緩衝的檔案輸入流
InputStream in = new BufferedInputStream(
new FileInputStream("C:\\log.txt"));
// 進一步:帶緩衝、可讀基本型別、可讀物件
DataInputStream din = new DataInputStream(
new BufferedInputStream(
new FileInputStream("data.bin")));
int i = din.readInt();
String s = din.readUTF();
MyObject obj = (MyObject) new ObjectInputStream(din).readObject();
精髓: 先建立資料源節點流,再層層包裝裝飾流,獲得組合功能。
InputStreamReader / OutputStreamWriter (橋接位元組流與字元流)BufferedReader (readLine)、PrintWriter (printf/println)、FileReader/Writer| Channel 實作 | 用途 | |
|---|---|---|
FileChannel | 檔案讀寫、記憶體映射、檔案鎖 | |
SocketChannel | TCP 非阻塞網路通訊 | |
ServerSocketChannel | 非阻塞伺服器端接受連線 | |
DatagramChannel | UDP 非阻塞 | |
Pipe.SinkChannel/SourceChannel | 執行緒間管道 |
| 場景 | 推薦 | 理由 |
|---|---|---|
| 中小檔案、簡單邏輯、工具腳本 | java.io (BufferedReader/Writer) | API 簡潔、開發效率高 |
| 高併發網路伺服器 (Web、IM、遊戲) | java.nio (Selector + Channel) | 單執行緒萬連線、低延遲 |
| 大檔案處理 (GB 級) | NIO MappedByteBuffer / transferTo | OS 頁面映射、零拷貝 |
| 跨進程檔案同步 | NIO FileLock | 系統級鎖 |
| Spring Boot / Netty / gRPC 應用 | NIO (框架封裝) | 框架屏蔽複雜度 |