NIO与普通IO的区别

NIO

在介绍NIO 编程之前, 我们首先需要澄清一个概念: NIO 到底是什么的简称? 有人称之为New I/O , 原因在于它相对于之前的 I/O 类库是新增的。这是它的官方叫法。但是,由于之前老的I/O 类库是阻塞 I/O , New I/O 类库的目标就是要让Java 支持非阻塞I/O , 所以, 更多的人喜欢称之为非阻塞I/O ( Non-block I/O ) 。由于非阻塞I/O 更能够体现NIO 的特点, 所以我们之后也将 NIO 指非阻塞 I/O 。

Java NIO 是从Java 1.4版本开始引入的,可以替代标准的Java IO API。它在标准Java 代码中提供了高速的、面向块的I/O 通过定义包含数据的类, 以及通过以块的形式处理这些数据, NIO 不用使用本机代码就可以利用低级优化, 这是原来的I/O包所无法做到的。

NIO与普通IO的主要区别

IO NIO
面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(Non Blocking IO)
(无) 选择器(Selectors)
  1. Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
  2. Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
  3. Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容