IO(Input/Output) 是電腦與外部世界交換資料的介面。Java 核心庫 java.io 提供全面的 IO 功能:檔案讀寫、標準裝置輸出等。Java 採流(Stream)為基礎進行序列化輸入輸出;另在 java.nio 提供區塊(Block)IO,支援高效能傳輸、記憶體映射、非阻塞操作。
| 模型 | 優點 | 缺點 |
|---|---|---|
| 流 IO | 簡單易用、API 直觀 | 效率較低、大量資料搬移開銷大 |
| 區塊 IO (NIO) | 高效能、支援零拷貝、非阻塞、選擇器 | 程式設計複雜度高 |
Java IO 體系分為兩大族群:
InputStream/OutputStream —— 處理二進位資料。Reader/Writer —— 自動處理字元編碼轉換,適合文字檔。所有流類別皆成對出現(如 FileInputStream 對應 FileOutputStream)。核心設計採用裝飾者模式:
FileInputStream、ByteArrayInputStream 等,直接連接實體資料。BufferedInputStream、DataInputStream 等,繼承 FilterInputStream,動態疊加功能。
// 逐步組合
FileInputStream fileIn = new FileInputStream("C:/log.txt");
BufferedInputStream bufferedIn = new BufferedInputStream(fileIn);
// 一行式寫法
InputStream in = new BufferedInputStream(new FileInputStream("C:/log.txt"));
先建立資料源流,再依需求包裝裝飾流,彈性極高。
FileChannel、SocketChannel)。ByteBuffer 等),支援讀寫模式切換。Selector)。MappedByteBuffer 實現零拷貝高速讀寫。掌握流與區塊兩大模型,並理解裝飾者模式如何賦予 IO 體系極致擴充性,是 Java 後端工程師的必修功課。