三件套:缓冲区(Buffer)、选择器(Selector)、通道(Channel)

缓冲区

实质:容器对象、数组(一个特殊的数组,能够跟踪和记录缓冲区状态变化情况)

在NIO库中,所有数据都是用缓冲区来处理(读/写),所有的缓冲区类型都继承于抽象类Buffer,对于Java的基本类型都有一个具体Buffer类型与之相对应

选择器

传统C/S,服务器会为每个客户端请求建立一个线程。大量请求会增大服务器开销,即便采用线程池也会遇到超过线程池最大数量的问题。

通道

实质:是一个对象,通过它可以读取和写入数据

我们永远不会将字节直接写入通道,而是将数据写入包含一个或多个字节的缓冲区。同样也不会直接从通道中读取字节,而是将数据从通道读入缓冲区,再从缓冲区获取这个字节