
- Java NIO 教程
- Java NIO - 首頁
- Java NIO - 概述
- Java NIO - 環境設定
- Java NIO 與 JAVA IO
- Java NIO - 通道
- Java NIO - 檔案通道
- Java NIO - 資料報通道
- Java NIO - 套接字通道
- Java NIO - 伺服器套接字通道
- Java NIO - 散射
- Java NIO - 聚集
- Java NIO - 緩衝區
- Java NIO - 選擇器
- Java NIO - 管道
- Java NIO - 路徑
- Java NIO - 檔案
- Java NIO - AsynchronousFileChannel
- Java NIO - 字元集
- Java NIO - 檔案鎖
- Java NIO 有用資源
- Java NIO - 快速指南
- Java NIO - 有用資源
- Java NIO - 討論
Java NIO 與 IO
眾所周知,Java NIO 是為了改進傳統的 Java IO API 而引入的。NIO 比 IO 更高效的主要改進之處在於 NIO 使用的通道資料流模型以及利用作業系統執行傳統的 IO 任務。
Java NIO 和 Java IO 之間的區別可以解釋如下:
如前一篇文章所述,NIO 中面向緩衝區和通道的資料流用於 I/O 操作,與 IO 相比,這提供了更快的執行速度和更好的效能。此外,NIO 利用作業系統執行傳統的 I/O 任務,這再次提高了效率。
NIO 和 IO 之間差異的另一個方面是,IO 使用流式資料流,即一次讀取一個位元組,並且依賴於將資料物件轉換為位元組以及反之亦然,而 NIO 處理的是資料塊,即位元組塊。
在 Java IO 中,流物件是單向的,而在 NIO 中,通道是雙向的,這意味著一個通道可以用於讀取和寫入資料。
IO 中的流式資料流不允許在資料中向前和向後移動。如果需要在從流中讀取的資料中向前和向後移動,則需要先將其快取到緩衝區中。而在 NIO 的情況下,我們使用面向緩衝區的方式,它允許在無需快取的情況下訪問資料的前後部分。
NIO API 還支援多執行緒,以便可以非同步地讀取和寫入資料,這樣在執行 IO 操作時,當前執行緒不會被阻塞。這再次使其比傳統的 Java IO API 更高效。
Java NIO 中引入了 **選擇器** 的概念,它允許以非同步或非阻塞的方式監聽多個通道的 IO 事件,從而實現了多執行緒。
NIO 中的多執行緒使其成為非阻塞的,這意味著只有在資料可用時才會請求執行緒讀取或寫入資料,否則執行緒可以在這段時間內用於其他任務。但在傳統的 Java IO 中,這是不可能的,因為它不支援多執行緒,這使得它成為阻塞的。
NIO 允許使用單個執行緒管理多個通道,但代價是解析資料可能比在 Java IO 中從阻塞流中讀取資料稍微複雜一些。因此,如果需要連線數少但頻寬非常高,並且需要一次傳送大量資料,那麼在這種情況下,Java IO API 可能是最佳選擇。