-
IO面向流,阻塞IO
-
NIO面向缓冲,非阻塞IO,选择器
可简单认为:IO是面向流的处理,NIO是面向块(缓冲区)的处理
NIO主要有三个核心部分组成:
-
buffer缓冲区(本质是数组)
-
Channel管道
-
-
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
-
buffer缓冲区和Channel管道
在NIO中并不是以流的方式来处理数据的,而是以buffer缓冲区和Channel管道配合使用来处理数据。
NIO就是通过Channel管道运输着存储数据的Buffer缓冲区的来实现数据的处理!
Channel不与数据打交道,它只负责运输数据。与数据打交道的是Buffer缓冲区
Channel-->运输,Buffer-->数据
相对于传统IO而言,流是单向的。对于NIO而言,有了Channel管道这个概念,我们的读写都是双向的
NIO优势
-
速度快,使用mmap虚拟内存映射对文件内容进行修改
-