一.概述
- NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。
- 所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
- Buffer(缓冲区)分为直接缓冲区与非直接缓冲区(后面会细讲)。Buffer 是一个对象, 它包含一些要写入或者刚读出的数据。任何时候访问 NIO 中的数据,您都是将它放到缓冲区中,而缓冲区实质上是一个数组,这与传统IO直接读到 Stream 对象中最大不同。
-
Selector允许单线程处理多个 Channel。因为它监控所有的 IO 事件,并负责分发。 事件到的时候触发,而不是同步的去监视事件。因此Selector的存在,我们说NIO是非阻塞。而传统IO流read()等方法会阻塞一个线程直至读写完成。(注意NIO文件读写没有非阻塞模式)
- 其它组件:如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。
- Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似
二.精简层次图
- Buffer覆盖了你能通过IO发送的基本数据类型:byte,short,int,long,float,double 和 char
- Channel涵盖了UDP 和 TCP 网络IO,以及文件IO
-
file包未包括在内