跟我学NIO(NIO概述)

Java NIO(New Input/Ouput)是从JDK1.4开始引入的新技术,是一种高速的、面向块的数据输入/输出技术,它弥补了原有的流式I/O的不足。

Java NIO(New Input/Ouput)是从JDK1.4开始引入的新技术,是一种高速的、面向块的数据输入/输出技术,它弥补了原有的流式I/O的不足。

传统的“流”式IO可以被视为单个字节的移动,即通过IO流对象一次移动一个字节。即使传输的是多个字节、字符、基本类型数据或对象的各种高级流类型,其内部实现也是基本相同的(先将各种类型数据转换为字节,进行传输和存储,再将字节转换为其原有类型的数据)。

NIO与传统IO实现的功能是相同的,其不同之处在于数据打包和传输的方式,NIO采用了“块”IO的实现方式,每次处理的是一个整体的数据块,而不是一个字节。它将操作中最耗时的部分转移回操作系统,因而可以极大地提高了IO效率。

NIO API定义在JDK的java.nio及其多个子包中,实际上传统的流式IO与NIO已经进行了集成,JDK1.4中java.io包就以NIO为基础进行重新实现,因此可以利用NIO的一些特性,例如java.io.*包中的一些类也包含了一块的形式读写数据的方法,以提高处理速度。

缓冲区(Buffer)

缓冲区是NIO的核心对象,用于缓存要写出、或刚读入的数据。在NIO中,所有数据都要通过缓冲区处理,将数据积累到一定的规模,再将整个数据块写出到输出流对象中,这与流式IO将数据直接写出到流对象中明显不同,数据读取操作的情况也是类似的。下面便是缓冲区类继承层次图:

缓冲区类继承层次图

从上图中可以看出Buffer是所有缓冲区的根类,同时也可以看出存在很多基本类型缓冲区,如:IntBuffer、LongBuffer等。

通道(Channel)

通道是NIO中的另一种重要对象,通过它可以实现数据的读入和写出操作,与先前的“流”相比,其不同之处在于通道是双向的,而普通的IO流只能单向地传输数据,这使得通道可以比流更好地反映底层操作系统的真实情况。

使用Channel传输数据时,我们永远不会直接将数据写入通道中、或直接从通道中读取数据,而是使用Buffer作为缓冲区,这样处理效率会高一些。通道类的继承层次图如下:

通道类继承层次图

上面这些就是NIO最基本和最重要的知识点,后面的文章将继续由浅到深的学习NIO,并且通过实际实例来说明如何使用NIO。

沉浸于现实的忙碌之中,没有时间和精力思念过去,成功也就不会太远了。——雷音
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号