? ?
java selector是什么?讓我們一起來了解一下吧!
java selector是一個抽象類。Selector的含義是選擇器,它支持NIO的多路復用。selector要應用selector.open()方法來取得,不可以直接創(chuàng)造。
Selector有以下幾種選擇鍵維護:
1.keys:保存了所有已經(jīng)在冊且沒有取消的選擇鍵,它屬于Set類型。可以使用selector.keys()獲取
3.canceledKeys:已取消鍵.已經(jīng)被取消但還沒有取消注冊(deregister)的選擇鍵。該合計不能被訪問。
3.canceledKeys:已取消鍵.已經(jīng)被取消但還沒有取消注冊(deregister)的選擇鍵。該合計不能被訪問。
實戰(zhàn)演練,具體步驟如下:
package?com.test.nio; ? import?java.io.DataInputStream; ? import?java.io.InputStream; ? import?java.net.InetSocketAddress; ? import?java.net.Socket; ? import?java.nio.channels.SelectionKey; ? import?java.nio.channels.Selector; ? import?java.nio.channels.ServerSocketChannel; ? import?java.nio.channels.spi.SelectorProvider; ? import?java.util.Iterator; ? import?java.util.Set; ? public?class?TestSelector?{undefined ? /** ? *?@param?args ? *?@throws?Exception ? */ ? public?static?void?main(String[]?args)?throws?Exception?{undefined ? //?TODO?Auto-generated?method?stub ? Selector?selector=SelectorProvider.provider().openSelector(); ? ServerSocketChannel?ssc=?ServerSocketChannel.open(); ? ssc.configureBlocking(false); ? ssc.socket().bind(new?InetSocketAddress("127.0.0.1",7979)); ? SelectionKey?acceptKey=ssc.register(selector,SelectionKey.OP_ACCEPT); ? //System.out.println("通道就緒個數(shù):"+selector.select()); ? int?keysAdded=0; ? while((keysAdded=selector.select())>0) ? {undefined ? Set?readyKeys=selector.selectedKeys(); ? Iterator?i=readyKeys.iterator(); ? while(i.hasNext()) ? {undefined ? SelectionKey?sk=(SelectionKey)?i.next(); ? i.remove(); ? ServerSocketChannel?nextReady=?(ServerSocketChannel)?sk.channel(); ? Socket?s=nextReady.accept().socket(); ? InputStream?din=s.getInputStream(); ? DataInputStream?ds=new?DataInputStream(din); ? String?str=ds.readLine(); ? while(str!=null) ? {undefined ? System.out.println(str); ? str=ds.readLine(); ? } ? } ? } ? } ? }
以上就是小編今天的分享了,希望可以幫助到大家。