IO与NIO的区别
IO就是完成数据的传输
| IO | NIO |
|---|---|
| 面向流 | 面向缓冲区(块) |
| 阻塞IO | 非阻塞IO |
| 无 | 选择器(Selectors) |
IO
- 传统的IO是面向流,是单向的(输入流和输出流),字节数据的流动 每次从流中读取一个或多个字节,直至读取所有的字节,它们没有缓存到任何地方
- IO的各种流是阻塞的,这意味着,当一个线程调用read或write时,该线程是被阻塞的,直到一些数据被读取,或者数据完全写入。该线程在此期间不能干其他事情。
NIO
- 面向缓冲区,通过通道传输,能前后移动流中的数据
- NIO的非阻塞模式,是一个线程从某个通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有可用的数据时,就什么都不会获取。
NIO可以使用一个或几个单线程管理多个通道(网络连接或文件),但是付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。
非阻塞写也是如此。一个线程请求写入一些数据到某通道,但是不需要等它完全写入,这个线程同时可以去做别的事情。 - NIO一个线程可以管理多个输入输出通道
NIO的选择器允许一个单独的线程监视多个输入通道,可以注册多个通道使用一个选择器,然后使用一个单独的线程来选择通道:这些通道里已经有可以处理的输入,或者选择已经准备写入的通道。
这种选择机制,使得一个单独的线程很容易来管理多个通道。

浙公网安备 33010602011771号