IO和NIO详解
最新使用mina框架遇到nio 顺便了解一下
模式不同 一个是阻塞的一个是非阻塞:
阻塞:线程开启读写时 就会处于等待状态 知道读到或者写入数据
非阻塞:线程直接返回结果,读的时候去拿数据 有的话就拿过来 没有不会等待 可以去干别的事情
IO流在读取时,会阻塞。直到发生以下情况:1、有数据可以读取。2、数据读取完成。3、发生异常
NIO读写数据是通过缓冲区buffer来读写 io 自然是通过io流
NIo缓冲区本质上是一个可以写入数据的内存块,然后可以再次读取,该对象提供了一组方法,可以更轻松地使用内存块,通过channel读写数据
IO是面向流的,NIO是面向缓冲区的,io流只能一个字节一个字节的读 中间不存在缓存 ,而缓冲区可以把数据缓存在处理
数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中
capacity 是buffer容量 position是读写入的位置下标 limit是最大限制
读的时候limit就是buffer中最大可读字节数 写模式就是最大可写入数 写模式limit等于buffer容量 capacity
核心 :
Selector是重要一个组件,可以检测多个NIO channel,看看读或者写事件是否就绪。多个Channel以事件的方式可以注册到同一个Selector,从而达到用一个线程处理多个请求成为可能,从而单个线程可以监听多个数据通道。~
select可以监听channel的四种状态
Connect:客户端连接成功
Accept:准备好进行连接
Read:可读
Write:可写