﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-cooperzh-随笔分类-读书笔记</title><link>http://www.blogjava.net/cooperzh/category/50551.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 05 Jan 2012 16:04:37 GMT</lastBuildDate><pubDate>Thu, 05 Jan 2012 16:04:37 GMT</pubDate><ttl>60</ttl><item><title>《java解惑》。。。</title><link>http://www.blogjava.net/cooperzh/archive/2012/01/05/java_puzzlers.html</link><dc:creator>cooperzh</dc:creator><author>cooperzh</author><pubDate>Thu, 05 Jan 2012 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/cooperzh/archive/2012/01/05/java_puzzlers.html</guid><description><![CDATA[<br />19 块注释(/* &nbsp;*/)不能可靠的注释掉代码块，应用单行注释符//<img src ="http://www.blogjava.net/cooperzh/aggbug/367973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cooperzh/" target="_blank">cooperzh</a> 2012-01-05 23:35 <a href="http://www.blogjava.net/cooperzh/archive/2012/01/05/java_puzzlers.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《构建高性能的大型分布式Java应用》笔记 第一章 IO</title><link>http://www.blogjava.net/cooperzh/archive/2011/12/27/367323.html</link><dc:creator>cooperzh</dc:creator><author>cooperzh</author><pubDate>Tue, 27 Dec 2011 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/cooperzh/archive/2011/12/27/367323.html</guid><description><![CDATA[IO三种方式：BIO，NIO，AIO<span style="font-size: 10pt; ">&nbsp;(异步读写asynchronous IO)</span><br /><br /><span style="font-size: 10pt; ">jdk1.6及之前都只实现BIO 和 NIO</span><br /><span style="font-size: 10pt; ">jdk1.7开始支持AIO，即NIO 2.0</span><br /><br /><br /><span style="font-size: 10pt; ">在BIO阻塞模式下server端:</span><br /><span style="font-size: 10pt; ">1 new ServerSocket(int port) 监听端口</span><br /><span style="font-size: 10pt; ">2 serverSocket.accept() 阻塞式等待客户端的连接，有连接才返回Socket对象</span><br /><span style="font-size: 10pt; ">3 socket.getINputStream() 获取客户端发过来的信息流</span><br /><span style="font-size: 10pt; ">4 socket.getOutputStream() 获取输出流对象，从而写入数据返回客户端</span><br /><br /><span style="font-size: 10pt; ">client端：</span><br /><span style="font-size: 10pt; ">1 newSocket（String host,int port) 建立与服务器端的连接，如果服务器没启动，报Connection refused异常</span><br /><span style="font-size: 10pt; ">2 socket.getInputStream() 读取服务器端返回的流</span><br /><span style="font-size: 10pt; ">3 socket.getOutputStream() 获取输出流，写入数据发送到服务器端</span><br /><br /><br /><span style="font-size: 10pt; ">在NIO模式下Server端：</span><br /><span style="font-size: 10pt; ">1 ServerSocketChannel.open() 获取serverScoketChannel实例</span><br /><span style="font-size: 10pt; ">2 serverScoketChannel.configueBlocking(false) 设置channel为非阻塞模式</span><br /><span style="font-size: 10pt; ">3 serverSocketChannel.socket() 获取serverSocket对象</span><br /><span style="font-size: 10pt; ">4 serverSocket.bind(port) 监听端口</span><br /><span style="font-size: 10pt; ">5 Selector.open() 打开Selector，获取selector实例</span><br /><span style="font-size: 10pt; ">6 serverSocketChannel.register(Selector,int) 向selector注册channel和感兴趣的事件</span><br /><span style="font-size: 10pt; ">7 while(true) 循环以保证正常情况下服务器端一直处于运行状态</span><br /><span style="font-size: 10pt; ">8 selector.select() 获取selector实例中需要处理的SelectionKey的数量</span><br /><span style="font-size: 10pt; ">9 for(SelectionKey key:selector.selectedKeys()) 遍历selector.selectedKeys,以对每个SelectionKey的事件进行处理</span><br /><span style="font-size: 10pt; ">10 key.isAcceptable() 判断SelectionKey的类型是否为客户端建立连接的类型</span><br /><span style="font-size: 10pt; ">11 key.channel() 当SelectionKey的类型是acceptabel时，获取绑定的ServerSocketChannel对象</span><br /><span style="font-size: 10pt; ">12 serverSocketChannel.accept() 接受客户端建立连接的请求，并返回SocketChannel对象</span><br /><span style="font-size: 10pt; ">13 socketChannel.regiseter(Selector,int) 向Selector注册感兴趣的事件类型，如read,write</span><br /><span style="font-size: 10pt; ">14 key.isReadable() 判断SelectionKey是否为readable，如是则意味着有消息流在等待处理</span><br /><span style="font-size: 10pt; ">15 socketChannel.read(ByteBuffer) 从SelectionKey中绑定的SocketChannel对象读取消息流</span><br /><span style="font-size: 10pt; ">16 socketChannel.write(ByteBuffer) 从SelectionKey中绑定的SocketChannel对象输出消息流</span><br /><br /><div><span style="font-family: Tahoma; font-size: 10pt; ">client端：</span></div><div><span style="font-size: 10pt; ">1 SocketChannel.open() 打开SocketChannel</span></div><div><span style="font-size: 10pt; ">2 SocketChannel.configureBlocking(false) 将SocketChannel配置为非阻塞模式</span></div><div><span style="font-size: 10pt; ">3 SocketChannel.connect(host,port) 连接到指定的目标地址</span></div><div><span style="font-size: 10pt; ">4 Selector.open() 打开Selector</span></div><div><span style="font-size: 10pt; ">5 SocketChannel.register(Selector,int) 向Selector注册感兴趣的事件,connected,read,write</span></div><div><span style="font-size: 10pt; ">6 while(true) 循环执行保证客户端一直处于运行状态</span></div><div><span style="font-size: 10pt; ">7 Selector.select() 从Selector中获取是否有可读的key信息</span></div><div><span style="font-size: 10pt; ">8 for(SelectionKey key:selector.selectedKeys()) 遍历selector中所有selectedKeys</span></div><div><span style="font-size: 10pt; ">9 SelectionKey.isConnectable() 判断是否为连接建立的类型</span></div><div><span style="font-size: 10pt; ">10 SelectionKey.channel() 获取绑定的SocketChannel</span></div><div><span style="font-size: 10pt; ">11 SocketChannel.finishConnect() 完成连接的建立（TCP/IP的三次握手）</span></div><div><span style="font-size: 10pt; ">12 SelectionKey.isReadable() 判断是否为可读类型</span></div><div><span style="font-size: 10pt; ">13 SelectionKey.channel() 获取绑定的SocketChannel</span></div><div><span style="font-size: 10pt; ">14 SocketChannel.read(ByteBuffer) 从SocketChannel中读取数到ByteBuffer中</span></div><div><span style="font-size: 10pt; ">15 SocketChannel.write(ByteBuffer) 向SocketChannel中写入ByteBuffer对象数据</span></div><div style="font-family: Tahoma; font-size: 11px; "></div><img src ="http://www.blogjava.net/cooperzh/aggbug/367323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cooperzh/" target="_blank">cooperzh</a> 2011-12-27 11:50 <a href="http://www.blogjava.net/cooperzh/archive/2011/12/27/367323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>