package com.yyj.nio;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class NIODemo {
public void selector() throws IOException{
ByteBuffer buffer = ByteBuffer.allocate(1024); //定義一個緩衝區數組長度爲1024
//打開選擇器
Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);//設置爲非阻塞方式
ssc.socket().bind(new InetSocketAddress(8080));
ssc.register(selector, SelectionKey.OP_ACCEPT); //註冊監聽事件
while(true){
Set selectedKeys = selector.selectedKeys();//取得所有key集合
Iterator it = selectedKeys.iterator();
while(it.hasNext()){
SelectionKey key = (SelectionKey) it.next();
if((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT){
ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel();
SocketChannel sc = ssChannel.accept();
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
it.remove();
}else if((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ){
SocketChannel sc = (SocketChannel) key.channel();
while(true){
buffer.clear();
int n = sc.read(buffer);
if(n<0){
break;
}
buffer.flip();
}
it.remove();
}
}
}
}
}
NIO的工作方式(一)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.