NIO學習--介紹

  • 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

相關文章
相關標籤/搜索