首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java NIO总结 (二)

2012-10-20 
Java NIO小结 (二)?除了第一篇小结中讲的Java New/IO的几个基本新特性外,New I/O中一个最突出的特性就是No

Java NIO小结 (二)

?

除了第一篇小结中讲的Java New/IO的几个基本新特性外,New I/O中一个最突出的特性就是Non-blocking I/O了,这个特性是针对原java.net包中socket编程的一个极大的补充和拓展。究竟non-blocking如何使用?有何特点?与socket的blocking IO相比,有哪些优势?

?

ServerSocket server = new ServerSocket(1299);while (true) { Socket socket = server.accept(); (new RequestHandlerThread(socket)).start();}?

// 打开selctor和服务器端SocketChannel,并且配置为non-blocking模式,然后绑定到9000端口。 Selector sel = Selector.open(); ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); ssc.socket().bind(new InetSocketAddress(9000));// 注册OP_ACCEPT事件,让selector在下一次select操作中选择OP_ACCEPT事件 ssc.register(sel, SelectionKey.OP_ACCEPT);while (selector.select()>0){ Iterator<SelectionKey> keys = selector.selectedKeys().iterator();while (keys.hasNext()) {SelectionKey key = keys.next();keys.remove();if (key.isValid()) {if (key.isAcceptable()) { // .... 接受SocketChannel,并注册OP_READ事件} else if (key.isReadable()) {// ... 从SocketChannel读取数据}else if (key.isWritable()){ // ... 向SocketChannel 写入数据} // 把当前已处理的key放入到selector的cancelling selectionkey集合当中,在下一次select操作中,该key被移去。 key.cancel();}}}?

ByteBuffer buff = ByteBuffer.allocate(128);socketChannel.read(buff);?

byte out[] = new byte[256];for (int i=0; i<256; i++) ? ? ?out[i]=i;socketChannel.write(ByteBuffer.wrap(out));?

?

非阻塞模式/阻塞模式

?

热点排行