package com.yuan.test; 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 TestNIO { public void selector() throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); Selector selector = Selector.open(); ServerSocketChannel sscChannel = ServerSocketChannel.open(); sscChannel.configureBlocking(false); sscChannel.socket().bind(new InetSocketAddress(8080)); sscChannel.register(selector, SelectionKey.OP_ACCEPT);// 註冊監聽事件 while (true) { Set selectKeysSet = selector.selectedKeys();//得到全部的key 集合 Iterator it = selectKeysSet.iterator(); while (it.hasNext()) { SelectionKey key = (SelectionKey) it.next(); if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { ServerSocketChannel sschChannel = (ServerSocketChannel) key .channel(); SocketChannel sChannel = sschChannel.accept(); sChannel.configureBlocking(false); sChannel.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(); } } } } }