1.简述
java nio是java SE 1.4引进的非阻塞IO,提供了一系列的新的API,不同于之前的阻塞IO。在缓冲管理、可伸缩的网络和文件IO、字符集支撑方面得到了显著提高。
主要位于java.nio包中,nio模块主要由以下几个部分组成:
- Buffer(缓冲区)
- Channel(通道)
- Selector(选择器)
- Charset(字符集)
下面就从这个几个核心来简单说说java的nio,但这里不对四大核心做过多详细的说明和操作,这部分会在后续的文章中逐一详述。
2.Buffer
Buffer本质上是一块连续的内存空间,用来作为数据容器。与传统的阻塞IO不同,在阻塞IO中数据都是面向流的读写,但是在nio中都是基于Buffer进行数据的读写操作,即从Buffer中读数据和将数据写进Buffer,如下图:
3.Channel
Channel代表着连接的实体可进行IO操作。通道的本质就是一种实体,可连接到IO操作。有点类似传统IO中的Stream,在nio中具有多种类型,后续文章中会详细说明。
Channel与Stream不同,它是双向的,即可以进行读写,而Stream是单向的,要么读要么写。
Channel的读写都是非阻塞的,但是Stream中的读写是阻塞。
4.Selecttor
Selector代表着多路选择器,是多路复用应用的关键所在。上述的可选择性通道(Selectable Channel)都可以注册到Selector上,然后由Selector监听各个Channel中的就绪事件,进行相应处理。
以上是nio中各个核心模块的简单说明和示意图,关于其详细的特性和api后续中会有一系列文章进行解释。