JAVA NIO概述
NIO的工作機(jī)制
- channel和selector的概念在NIO中尤為突出。channel可比喻為汽車或者高鐵,selector則是車站的調(diào)度系統(tǒng),負(fù)責(zé)控制每個(gè)車的運(yùn)行狀態(tài)。
public void selector() throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(1024);
Selector selector = Selector.open();
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false); // 設(shè)置為非阻塞方式
serverSocketChannel.socket().bind(new InetSocketAddress(8080));
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); // 注冊(cè)監(jiān)聽(tīng)事件
while(true) {
Set selectKeys = selector.selectedKeys();
Iterator iterator = selectKeys.iterator();
while(iterator.hasNext()) {
SelectionKey selectionKey = (SelectionKey) iterator.next();
if ((selectionKey.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
ServerSocketChannel sscChannel = (ServerSocketChannel) selectionKey.channel();
SocketChannel sc = sscChannel.accept();
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
iterator.remove();
} else if ((selectionKey.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
SocketChannel sc = (SocketChannel) selectionKey.channel();
while(true) {
buffer.clear();
int i = sc.read(buffer);
if (i < 0) {
break;
}
buffer.flip();
}
iterator.remove();
}
}
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。