Nonblocking I/O is primarily relevant to network connections. Pipe channels that move data between two threads also support nonblocking I/O. File channels don't support it at all because file access doesn't block nearly as often as network channels do, and most modern disk controllers can fill a CPU with data fast enough to keep it satisfied. Furthermore, it's uncommon for one program to read or write hundreds of files simultaneously. However, on network servers, this usage pattern is the rule, not the exception.(來自Java™ I/O, 2nd Edition)
主要包:
java.nio
定義了Buffer及其數據類型相關的子類。其中被java.nio.channels中的類用來進行IO操作的ByteBuffer的作用非常重要。
java.nio.channels
定義了一系列處理IO的Channel接口以及這些接口在文件系統和網絡通訊上的實現。這個包通過Selector和SelectableChannel這兩個類,還定義了一個進行異步(non-blocking)IO操作的API,這對需要高性能IO的應用非常重要。這個包可以說是NIO API的核心。
java.nio.channels.spi
定義了可用來實現channel和selector API的抽象類。
java.nio.charset
定義了處理字符編碼和解碼的類。
java.nio.charset.spi
定義了可用來實現charset API的抽象類。
java.nio.channels.spi和java.nio.charset.spi這兩個包主要被用來對現有NIO API進行擴展,在實際的使用中,我們一般只和另外的3個包打交道。
詳細API講解參見http://dev.csdn.net/article/58/58120.shtm
反應器模式(Reactor pattern)
NIO 設計背后的基石是反應器設計模式。 分布式系統中的服務器應用程序必須處理多個向它們發送服務請求的客戶機。然而,在調用特定的服務之前,服務器應用程序必須將每個傳入請求多路分用并分派到各自相應的服務提供者。反應器模式正好適用于這一功能。它允許事件驅動應用程序將服務請求多路分用并進行分派,然后,這些服務請求被并發地從一個或多個客戶機傳送到應用程序。
反應器模式的核心功能:
將事件多路分用
將事件分派到各自相應的事件處理程序
Selector機制
Selector是一個“多路復用器”,負責統一各個處理程序的消息注冊,統一接收客戶端或服務器消息信息,再分發給不同的事件處理程序進行處理。整個流程就一個注冊->接收->處理的過程.
Selector作為一個樞紐中心目的就是為高效復用提供基礎,開過多Selector基本說明設計或使用上存在問題,這篇文章詳細分析了selector機制。(http://blog.csdn.net/haoel/archive/2008/03/27/2224055.aspx)相關資料
http://rox-xmlrpc.sourceforge.net/niotut/index.html
指出了一些設計原則和一個基于NIO的C/S程序。
http://onjava.com/onjava/2002/09/04/nio.html