Netty框架(二)————NIO编程

       之前提到的同步阻塞I/O模型存在很多弊端,为了解决这些弊端,我们引进了非阻塞I/O模型,即NIO模型,相比与之前的Serversocket和Socket,NIO提供了ServerSocketChannel和SocketChannel两种套接字通道实现,下面介绍一下NIO的几个关键技术,

Netty框架(二)————NIO编程_第1张图片
NIO工作原理
Netty框架(二)————NIO编程_第2张图片
      
         1、缓冲区(Buffer)
在NIO库中,所有数据都是通过缓冲区处理的,在读取数据时,直接从缓冲区中读取;在写入数据时,写到缓冲区中,缓冲区t通常相当于一个字节数组(ByteBuffer),NIO中所有的数据操作都是在缓冲区中进行。

缓冲区(Buffer)类的继承关系图

Netty框架(二)————NIO编程_第3张图片
每一个Buffer类都实现了Buffer接口,而且每个Buffer类都有一样的操作,除了ByteBuffer,因为大多数的I/O操作都使用ByteBuffer,因此它除了具有一般缓冲区的操作外,还提供了其他特有的操作。

         2、通道Channel
通道就像自来水管一样,网络数据通过Channel进行读写,通道与流的不同之处在于通道是双向的,流只能在一个方向上移动(只能进行读或者写),而通道可以用于读、写,也可以同时用于读写,

和Channel相关的接口及类结构图如下:
Netty框架(二)————NIO编程_第4张图片

从该结构图也可以看到,Channel主要提供的功能如下:

1)当前Channel的状态信息,比如是打开还是关闭等。
2)通过ChannelConfig可以得到的Channel配置信息。
3)Channel所支持的如read、write、bind、connect等IO操作。
4)得到处理该Channel的ChannelPipeline,既而可以调用其做和请求相关的IO操作。

      3、多路复用器Selector

Selector简称选择器,在NIO编程中,它可以选择在通道中已经就绪的任务,简单来讲,Selector会不断轮询注册在其上的Channel,一个Selector可以轮询多个Channel,如果某个Channel上面有新的连接、读或者写事件,这个Channel就会处于就绪状态,然后就会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续I/O操作。

NIO框架图:
Netty框架(二)————NIO编程_第5张图片

你可能感兴趣的:(Netty框架(二)————NIO编程)