NIO是new io的简称,但是nio类库的目标就是让Java支持非阻塞I/O,所以NIO也被解释为非阻塞IO(Non-block I/O)。
与Socket和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现,
这两种新增的通道支持阻塞和非阻塞两种形式。阻塞模式使用简单,但是性能和可靠性不好,非阻塞模式和阻塞模式正
好相反,使用复杂,三十性能和可靠性比较完善。开发人员根据需求自行选择!!
一般情况下:
低负载、低并发的应用可以选择同步阻塞IO,降低编程复杂度
高负载,高并发的应用需要选择NIO来提高性能和可靠性。
NIO弥补了原来同步阻塞IO的不足,在JAVA中提供了高速的,面向块的IO,以块的形式处理数据,提高传输效率
NIO的相关概念:
缓冲区Buffer
在NIO中,所有的数据搜时用缓冲区处理的,在读取数据时,它是直接读取到缓冲区中的,在写入数据时,写入到
缓冲区,任何时候访问NIO中的数据,都是通过缓冲区提供对数据的结构化访问以及读写位置(limit)等信息
NIO中的缓冲区有:
ByteBuffer : 字节缓冲区
CharBuffer:字符缓冲区
ShortBuffer : 短整形缓冲区
IntBuffer:整形缓冲区
LongBuffer : 长整形缓冲区
FloatBuffer:浮点型缓冲区
DoubleBuffer:双精度浮点型缓冲区
通道Channel
Channel是一个通道,可以通过它读取和写入数据,它就像自来水管一样。网络通过Channel读取和写入,通道是
双向的,流只是一个方向上的,而且通道可以用于读、写或者同时用于读写。
Channel分为两大类:分别是用于网络读写的SelectableChannel和用于文件操作的FileChannel。
ServerSocketChannel和SocketChannel都是SelectableCHannel的子类!!
多路复用器Selector
多路复用器Selector是java nio的编程基础,多路复用器提供选择已经就绪的任务的能力。通俗来说就是:Selector
会不断的轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读写事件,这个Channel就处于就绪状态
,会被Selector轮询出来,然后通过SelectionKey可以获取就绪的Channel的集合,进行后续操作!!!
注:一个多路复用器Selector可以同时轮询多个Channel