- Java NIO(New IO)是從Java 1.4版本開始引入的一個新的IO API,能夠替代標準的Java IO API。其主要組成的元素有:
|--buffer :負責在創建好的通道(channel)中搬運的數據
|--ByteBuffer 不一樣類型的緩衝區
|--CharBuffer
|--DoubleBuffer ...
|--channel :源與目標鏈接的通道,不作數據傳輸
|--FileChannel 文件io
|--DatagramChannel UDP io
|--SocketChannel TCP io
|--ServerSocketChannel TCP io
|--Selectors : 選擇器用於監聽多個通道的事件,所以,單個的線程能夠監聽多個數據通道。線程
- 與傳統io的區分:
1. nIo是面向緩衝區, io是面向流事件
2.Java IO的各類流是阻塞的。這意味着,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據徹底寫入。該線程在此期間不能再幹任何事情了。 Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,可是它僅能獲得目前可用的數據,若是目前沒有數據可用時,就什麼都不會獲取。而不是保持線程阻塞,因此直至數據變的能夠讀取以前,該線程能夠繼續作其餘的事情。 非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不須要等待它徹底寫入,這個線程同時能夠去作別的事情。 線程一般將非阻塞IO的空閒時間用於在其它通道上執行IO操做,因此一個單獨的線程如今能夠管理多個輸入和輸出通道(channel)。 it
3. selectors 的加入Java NIO的選擇器容許一個單獨的線程來監視多個輸入通道,你能夠註冊多個通道使用一個選擇器,而後使用一個單獨的線程來「選擇」通道:這些通道里已經有能夠處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。io