javaNIO

编程

特点

1.No -Blocking 非阻塞 使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。

通俗理解:NIO是可以做到用一个线程来处理多个操作的。假设有10000个请求过来,根据实际情况,可以分配50或者100个线程来处理。不像之前的阻塞IO那样,非得分配10000个

2.操作通道和缓冲,数据总是从通道被读取到缓冲中或者从缓冲中写入到通道中。

核心

Channel

1.通道可以同时进行读写,相比Stream流 只可以进行读或者写

2.通道可以实现异步读写

3.通道可以从缓冲读数据,可以向缓冲写数据

Buffer

buffer的容量 Capacity

当前读写的位置 Position

信息末尾的位置 Limit

flip():将buffer从写模式切换为读模式,将position的值重置为0,limit的值设置为之前的position的值。

clear() vs compact():

clear 方法清空缓冲区;compact只会清空已读取过的数据,而未读取的数据保存在Buffer中。

Selector

一个组件,可以检测多个NIO channel,看看读或者写事件是否就绪,多个Channel以事件的方式可以注册到同一个Selector,从而达到一线程处理多个请求。

以上是 javaNIO 的全部内容, 来源链接: utcz.com/z/512700.html

回到顶部