傳統IO的特點
有兩個阻塞點:
1. server.accept();接收連接
2.InputStream.read(bytes);讀取數據
單線程下只能有一個客戶端連接,用線程池可以解決單個客戶端連接的問題,但是太消耗性能。
NIO的特點
NIO是非阻塞的
傳統IO在通道中讀取數據的時候,如果沒有數據,會一直等待;而NIO(非阻塞IO)則會實時返回。
NIO可以單線程處理多客戶端連接。
Selector 是NIO核心 ,負載監聽ServerSocketChannel與SocketChannel ,支持單線程連多個客戶端;類似通道管理器而且底層是c實現的;線程擁有一個selector就可以支持多個客戶端。
NIO和傳統IO的比較
NIO的ServerSocketChannel類似於傳統IO的ServerSocket,用於設置連接的屬性。
NIO的SocketChannel 類似於傳統IO的Socket,用於數據的傳輸