Java NIO

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后续中会有一系列文章进行解释。

参考

Linux IO模式及 select、poll、epoll详解

posted @ 2018-05-30 20:01  怀瑾握瑜XI  阅读(482)  评论(0编辑  收藏  举报