java nio基礎使用樣本_java

來源:互聯網
上載者:User

在jdk1.4中提出的技術,非阻塞IO,採用的是基於事件處理方式。
傳統的io技術為阻塞的,比如讀一個檔案,惹read方法是阻塞的,直到有資料讀入。
歸納為:
1、java io為阻塞,在開啟一個io通道後,read將一直等待在連接埠一邊讀取位元組內容,如果沒有內容進來,read相當於阻塞掉了。
2、在1的基礎上改進為,開設線程,serversocker.accept()後讓線程去等待,但是當並發量高的時候,相當耗費資源的。
3、java nio為非阻塞,採用的是reactor反應堆模式,或者說observer觀察者模式,監察io連接埠,註冊事件到selector,當事件滿足條件後觸發行為。
大致流程為:
java nio提供一個selector,這個類似一個觀察者,將需要探知的socketchannel註冊到selector上
接著我們做別的事情,當有事件發生時候,selector會通知我們,傳回一組selectionKey,我們讀取這些key就會獲得到我們剛剛註冊過的socketchannel,然後從這個channel讀取資料、處理商務邏輯。
selector內部原理,採用輪詢的方式,對所註冊的channel進行遍曆,判斷channel所註冊的事件是否發生。
代碼舉例為:

複製代碼 代碼如下:

// 1.建立一個selector對象
Selector selector = Selector.open();
// 2.建立channel對象,並綁定在8080連接埠上
ServerSocketChannel ssc = ServerSocketChannel.open();
InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(),8080);
ssc.socket().bind(address);
// 3.將channel設定為非阻塞方式
ssc.configureBlocking(false);
// 向selector註冊channel以及我們感興趣的事件
SelectionKey skey = ssc.register(selector,SelectionKey.OP_ACCEPT);// 這邊註冊了accept,伺服器接受到client串連事件
// 4、簡單類比下輪詢過程
while(true)
{
  // selector通過select方法,通知我們感興趣的事件發生了
  int nKeys = selector.select();
  // 當nKeys>0表示事件發生了
  // 這時候可以通過selector.selectedKeys();方法拿到key集合
  Set selectKeys = selector.selectedKeys();
  // 5、迭代遍曆keys對象,分別做適配商務邏輯處理
  // 比如:
  s = (SelectionKey)(selectKeys.iterator()).next();
  if(s.isAcceptable())// 判斷為註冊的OP_ACCEPT事件
  {
    // 從channel中擷取我們剛才註冊的channel
    Socket socket = ((ServerSocketChannel)s.channel()).accept().socket();
    SocketChannel sc = socket.getChannel();
    // 設定為非阻塞
    sc.configureBlocking(false);
  // 註冊read/write事件
    sc.register(selector, SelectionKey.OP_READ |SelectionKey.OP_WRITE);
  }
}
// 上邊就是簡單的java nio示範的虛擬碼
// 這時候,client端可以telnet 主機名稱 連接埠號碼 串連到server伺服器。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.