1.3.1、缓冲区(Buffer)
本质是可以读写数据的内存块,Channel读取或者写入的数据必须通过Buffer:
java.nio.Buffer抽象类的属性:
// Invariants: mark <&#61; position <&#61; limit <&#61; capacity
private int mark &#61; -1;
private int position &#61; 0;
private int limit;
private int capacity;
1.3.2、通道&#xff08;Channel&#xff09;
通道是双向的&#xff0c;可以读操作、也可以写操作。
java.nio.channels.Channel接口的常用实现类&#xff1a;
FileChannel用于文件的数据读写&#xff0c;DatagramChannel用于UDP的数据读写&#xff0c;ServerSocketChannel和SocketChannel用于TCP的数据读写。
1.3.3、选择器&#xff08;Selector&#xff09;
Selector选择器使用一个线程来维护。多个Channel会以事件的方式注册到同一个Selector,当有事件发生时&#xff0c;Selector会获取事件&#xff0c;然后针对每个事件进行响应的处理。这样就不必为每个连接创建一个线程&#xff0c;不用维护多线程&#xff0c;也不会有多线程之间的上下文切换导致的系统的开销。
Selector示意图&#xff1a;
1.4、AIO
异步非阻塞模型&#xff0c;AIO引入异步通道的概念&#xff0c;使用了Proactor,只有有效的请求才启动线程&#xff0c;特点是先由操作系统完成后&#xff0c;才通知服务器端程序启动线程去处理&#xff0c;一般适用于连接数较多且连接时间较长的应用。
1.5、BIO NIO AIO 对比
尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java&#xff0c;让学习成为一种享受_哔哩哔哩_bilibili尚学堂给同学们带来全新的Java300集课程啦本课程为Java300集2022版第一季&#xff0c;配合最新版的Java课程&#xff0c;所有视频重新录制&#xff0c;课件所有图形做了重新绘制和配色&#xff0c;图解学习Java&#xff0c;让学习成为一种享受本套教程专门为零基础学员而制&#xff0c;适合准备入行Java开发的零基础学员&#xff0c;视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂&#xff0c;由浅入深。不仅适用于零基础的初学者&#xff0c;有经验的程序员也可做巩固学习。后续课https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from&#61;333.999.0.0