
? ?
java selector是什么?讓我們一起來了解一下吧!
java selector是一個抽象類。Selector的含義是選擇器,它支持NIO的多路復用。selector要應用selector.open()方法來取得,不可以直接創造。

Selector有以下幾種選擇鍵維護:
1.keys:保存了所有已經在冊且沒有取消的選擇鍵,它屬于Set類型。可以使用selector.keys()獲取
3.canceledKeys:已取消鍵.已經被取消但還沒有取消注冊(deregister)的選擇鍵。該合計不能被訪問。
3.canceledKeys:已取消鍵.已經被取消但還沒有取消注冊(deregister)的選擇鍵。該合計不能被訪問。
實戰演練,具體步驟如下:
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("通道就緒個數:"+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();
?
}
?
}
?
}
?
}
?
}以上就是小編今天的分享了,希望可以幫助到大家。
