问答题 Java NIO是什么
【正确答案】
【答案解析】在非阻塞IO(Nonblocking IO,NIO)出现之前,Java是通过传统的Socket来实现基本的网络通信功能的。以服务器端为例,其实现基本流程如图所示。

Socket使用流程

如果客户端还没有对服务器端发起连接请求,那么accept就会阻塞(阻塞指的是暂停一个线程的执行以等待某个条件发生,例如某资源就绪)。如果连接成功,当数据还没有准备好时,对rcad的调用同样会阻塞。当要处理多个连接时,就需要采用多线程的方式,由于每个线程都拥有自己的栈空间,而且由于阻塞会导致大量线程进行上下文切换,使得程序的运行效率非常低下,因此在J2SE 1.4中引入了NIO来解决这个问题。
NIO通过Selector、Channel和Buffer来实现非阻塞的IO操作,其实现原理如图所示。