NIO常用的API

一、Selector注册事件

1.1

SelectionKey.OP_CONNECT

连接就绪(客户端连接好了,需要经过三次握手、四次挥手)

1.2

SelectionKey.OP_ACCEPT

接受就绪(有新客户端来了)

1.3

SelectionKey.OP_READ

就读绪(有新数据到达)

1.4

SelectionKey.OP_WRITE

写就绪(可以写数据了)

二、Selector使用流程

2.1

open()

开启一个选择器,可以给选择器注册需要关注的事件

2.2

register()

将一个Channel注册到选择器,当选择器触发对应关注事件时回调到Channel中,处理相关数据

2.3

select()/selectNow()

一个通道Channel,处理一个当前的可用、待处理的通道数据

(这两个方法是阻塞方法,阻塞直到事件到达。Selector并不是一个完整的观察者模式,是一个半观察者模式。可用向Selector注册和反注册事件,但是事件到达的时候并不会通知Channel,需要遍历池子,在遍历的时候需要一个最基本的线程,所以至少需要一个线程)

2.4

selectedKeys()

得到当前就绪的通道

2.5

wakeUp()

唤醒一个处于select状态的选择器

2.6

close()

关闭一个选择器,注销所有关注的事件

三、Selector注意事项

注册到选择器的通道必须为非阻塞状态

FileChannel不能用于Selector,因为FileChannel不能切换为非阻塞模式;套接字通道可以

(FileChannel仅仅是一个文件通道,可以使用通道的方式操作文件,也就是说可以使用块状的方式操作文件,可以将一整块数据放到buffer当中,一整块数据放到file。但是不能说当前文件可读的时候请告诉我、当前文件可写的时候请告诉我,文件永远都可读)

Interest集合(同时注册了可读、可写状态)、Ready集合(当前就绪的集合,包括可读集合、可写集合)

Channel通道

Selector选择器

obj附加值

发布了174 篇原创文章 · 获赞 115 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/nicolelili1/article/details/103983839
NIO