【Java.NIO】NIO操作类型与就绪条件
2014-12-13 18:17
190 查看
转自: http://blog.csdn.net/zhouhl_cn/article/details/6567877
使用NIO编程时,对NIO就绪选择的理解,是NIO编程的关键。NIO与传统IO的区别是提供了就绪选择的能力,为原来的阻塞的IO提供了非阻塞的能力,从而为我们提供了用少量的线程数量同时为大量的连接通信的可能。
1、操作类型
NIO的就绪选择共涉及4个操作:OP_READ, OP_WRITE, OP_ACCEPT, OP_CONNECT。客户端对应的通道是SocketChannel,服务端对应的通道是ServerSocketChannel。就绪操作与通道对应关系:
客户端的SocketChannel支持 OP_CONNECT, OP_READ, OP_WRITE三个操作。服务端ServerSocketChannel只支持OP_ACCEPT操作,在服务端由ServerSocketChannel的accept()方法产生的SocketChannel只支持OP_READ, OP_WRITE操作。
2、就绪条件
OP_ACCEPT就绪条件:
当收到一个客户端的连接请求时,该操作就绪。这是ServerSocketChannel上唯一有效的操作。
OP_CONNECT就绪条件:
只有客户端SocketChannel会注册该操作,当客户端调用SocketChannel.connect()时,该操作会就绪。
OP_READ就绪条件:
该操作对客户端和服务端的SocketChannel都有效,当OS的读缓冲区中有数据可读时,该操作就绪。
OP_WRITE就绪条件:
该操作对客户端和服务端的SocketChannel都有效,当OS的写缓冲区中有空闲的空间时,该操作就绪。
使用NIO编程时,对NIO就绪选择的理解,是NIO编程的关键。NIO与传统IO的区别是提供了就绪选择的能力,为原来的阻塞的IO提供了非阻塞的能力,从而为我们提供了用少量的线程数量同时为大量的连接通信的可能。
1、操作类型
NIO的就绪选择共涉及4个操作:OP_READ, OP_WRITE, OP_ACCEPT, OP_CONNECT。客户端对应的通道是SocketChannel,服务端对应的通道是ServerSocketChannel。就绪操作与通道对应关系:
OP_ACCEPT | OP_CONNECT | OP_WRITE | OP_READ | ||
客户端 | SocketChannel | Y | Y | Y | |
服务端 | ServerSocketChannel | Y | |||
服务端 | SocketChannel | Y | Y |
2、就绪条件
OP_ACCEPT就绪条件:
当收到一个客户端的连接请求时,该操作就绪。这是ServerSocketChannel上唯一有效的操作。
OP_CONNECT就绪条件:
只有客户端SocketChannel会注册该操作,当客户端调用SocketChannel.connect()时,该操作会就绪。
OP_READ就绪条件:
该操作对客户端和服务端的SocketChannel都有效,当OS的读缓冲区中有数据可读时,该操作就绪。
OP_WRITE就绪条件:
该操作对客户端和服务端的SocketChannel都有效,当OS的写缓冲区中有空闲的空间时,该操作就绪。
相关文章推荐
- NIO操作类型与就绪条件
- NIO操作类型与就绪条件
- NIO操作类型与就绪条件
- JAVA NIO操作类型
- 对Java日期类型的相关操作总结
- java 操作MySQL数据库的一个例子,包括表字段,类型,编码格式,表的所有值读取
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- java语言操作Oracle数据库中的CLOB数据类型
- java基本数据类型及其所对应对象的自动装箱,new,valueof操作研究
- 用java 操作 oracle 日期类型字段
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- java IO操作与字节流(八)过滤流输入输出基本数据类型
- java对基本数据类型的流的操作
- Java中各种文件类型操作的代码与详细文件IO讲解
- java 数据库的datetime类型操作,马虎要不得
- 用Java操作Oracle日期类型字段
- java语言操作Oracle数据库中的CLOB数据类型
- 用JAVA操作日期类型
- Java数据类型操作的原子性
- 用JAVA操作日期类型