说一说NIO的实现原理
NIO是基于IO多路复用模型的实现,它包含三个核心组件,分别是Buffer、Channel、Selector。
加分回答
Buffer对象包含三个重要的属性,分别是capacity、position、limit。其中,capacity代表Buffer的容量,就是说Buffer中最多只能写入capacity个数据。position代表访问的位置,它的初始值为0,每读取/写入一个数据,它就会向后移动一个位置。limit代表访问限制,就是本次操作最多能读取/写入多少个数据。这三个属性的关系是,position<=limit<=capacity,Buffer通过不断调整position和limit的值,使得自身可以不断复用。
得分点
Buffer、Channel、Selector
参考答案
标准回答
NIO是基于IO多路复用模型的实现,它包含三个核心组件,分别是Buffer、Channel、Selector。
加分回答
Buffer对象包含三个重要的属性,分别是capacity、position、limit。其中,capacity代表Buffer的容量,就是说Buffer中最多只能写入capacity个数据。position代表访问的位置,它的初始值为0,每读取/写入一个数据,它就会向后移动一个位置。limit代表访问限制,就是本次操作最多能读取/写入多少个数据。这三个属性的关系是,position<=limit<=capacity,Buffer通过不断调整position和limit的值,使得自身可以不断复用。
延伸阅读
Java NIO根据操作系统的不同,会对Selector做不同的实现。如Linux上的PollSelectorProvider、Windows上的WindowsSelectorProvider、MacOS上的KQueueSelectorProvider等。在使用Selector时,我们不需要指定哪一个实现,JDK会自动选择合适的Selector实现。