NIO(New I/O或者Non-blocking I/O)是从Java 1.4开始引入的一种新的I/O编程方式,相对于传统的IO来说,NIO更加灵活、高效、可靠,能够更好地处理海量数据和高并发场景。简单来说就是:并发能力强。
Channel是数据传输的双向通道,Stream要不就是读,要不就是写。Channel比Stream更加底层。
常见的Channel有FileChannel、SocketChannel。
Buffer是用来缓冲读写数据的。
常见的Buffer有ByteBuffer、IntBuffer
以前的多线程服务器程序,一个线程对应一个Socket,只能适合连接数少的场景。而线程池版,阻塞模式下,只能处理一个Socket链接。
selector 的作用就是配合一个线程来管理多个 channel。适合连接数特别多,但流量低的场景。
调用 selector 的 select() 会阻塞直到 channel 发生了读写就绪事件,这些事件发生,select 方法就会返回这些事件交给 thread 来处理。