传统IO的特点
有两个阻塞点:
1. server.accept();接收连接
2.InputStream.read(bytes);读取数据
单线程下只能有一个客户端连接,用线程池可以解决单个客户端连接的问题,但是太消耗性能。
NIO的特点
NIO是非阻塞的
传统IO在通道中读取数据的时候,如果没有数据,会一直等待;而NIO(非阻塞IO)则会实时返回。
NIO可以单线程处理多客户端连接。
Selector 是NIO核心 ,负载监听ServerSocketChannel与SocketChannel ,支持单线程连多个客户端;类似通道管理器而且底层是c实现的;线程拥有一个selector就可以支持多个客户端。
NIO和传统IO的比较
NIO的ServerSocketChannel类似于传统IO的ServerSocket,用于设置连接的属性。
NIO的SocketChannel 类似于传统IO的Socket,用于数据的传输