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

Java IO 體系完整導覽:從流模型、裝飾者模式到 NIO 通道與緩衝區

     編輯:Java 相關知識

什麼是 IO

IO (Input/Output) 是電腦與外部交換資料的介面。Java 核心庫 java.io 提供全面的 IO 介面:檔案讀寫、標準裝置輸出等。Java IO 以 流 為基礎進行序列化讀寫,所有資料串列化寫入輸出流或從輸入流讀入。此外,java.nio 提供 區塊 IO,支援高效能傳輸、讀寫鎖定、非同步 IO 等進階功能。

流 IO vs 區塊 IO

特性流 IO (java.io)區塊 IO (java.nio)
程式模型串列流通道 + 緩衝區
易用性簡單直觀較複雜
效能一般高 (系統呼叫少、零拷貝)
適用場景中小檔案、文字處理、網路串流大檔案、高併發網路、記憶體映射檔

Java IO 類別架構 — 裝飾者模式

Java IO 採用 Decorator Pattern,依功能劃分 Stream,可動態組合所需功能:

  • 根介面:InputStream / OutputStream (位元組) 、Reader / Writer (字元,自動處理編碼轉換)。
  • 資料源節點:FileInputStream, ByteArrayInputStream, Socket.getInputStream() 等。
  • 裝飾器:BufferedInputStream (緩衝)、DataInputStream (基本型別讀取)、GZIPInputStream (壓縮) 等,皆繼承 FilterInputStream。

實戰組合範例:緩衝檔案讀取

// 逐層包裝
FileInputStream fis = new FileInputStream("C:\\log.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis); // 可直接 readInt(), readUTF()

// 單行鏈式寫法
InputStream in = new DataInputStream(
                    new BufferedInputStream(
                      new FileInputStream("C:\\log.txt")));

Reader/Writer 字元流體系

  • InputStreamReader / OutputStreamWriter:位元組流 ↔ 字元流橋樑,指定 Charset (預設平台編碼)。
  • BufferedReader / BufferedWriter:行緩衝,提供 readLine(), newLine()。
  • PrintWriter:格式化輸出,println() 自動刷新。

Java NIO 核心概念

1. Channel (通道)

雙向傳輸管道,對應底層檔案描述符或 Socket。主要實作:

  • FileChannel:檔案隨機存取、記憶體映射、檔案鎖。
  • SocketChannel, ServerSocketChannel, DatagramChannel:非阻塞網路 IO。

2. Buffer (緩衝區)

固定大小容器,保存基本型別資料 (ByteBuffer, CharBuffer, IntBuffer 等)。核心屬性:

  • capacity:容量不可變。
  • position:下一個讀寫位置。
  • limit:尚有資料的邊界。

關鍵操作:flip() (切換寫→讀)、clear() (重置位置)、compact() (保留未讀資料)。

3. Selector (多工選擇器)

單執行緒管理成千上萬 Channel,註冊關注事件 (OP_READ, OP_WRITE, OP_ACCEPT, OP_CONNECT),select() 阻塞直到有就緒 Channel,實現高併發 Reactor 模式。

學習路徑建議

  1. 掌握 java.io 裝飾者組合模式,熟練處理文字/二進位檔案。
  2. 閱讀官方教學:Introduction to Java I/O、Reading and Writing。
  3. 進入 NIO:Getting Started with NIO,重點實作非阻塞 Echo Server。
  4. 進階主題:AsynchronousFileChannel (JDK 7+)、MemoryMappedFile、零拷貝 FileChannel.transferTo()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved