Java IO与NIO

IO与NIO(非阻塞IO)之间的区别:

IO NIO
面向流 面向缓存
阻塞 非阻塞
- 选择器

 

1. 流与缓存

    Java IO是面向流的,意味着每次从流中读一或多个字节,直到读取所有的字节,它们是没有缓存在任何地方。此外,它们不能前后移动流中的数据,如果需要移动,需先将它们缓存到一个缓冲区。

    Java NIO是面向缓存的,数据读取到一个稍后处理的缓存,需要时可在缓存中前后移动,这就增加了处理过程中的灵活性。但还需要检查是否该缓存包含所有需要的数据,而且,需确保当更多的数据读入缓存时,不要覆盖缓存中尚未处理的数据。

 

2. 阻塞与非阻塞

    Java IO中各种流是阻塞的,这意味着,当一个线程调用read()或write()时,该线程被阻塞,直到数据被读取或完全写入。

    Java NIO是线程向某通道发送请求读取数据,仅能得到目前可用的数据,如果没有,就什么都不做,当然它不会保持线程阻塞,所以直至数据可以读取之前,该线程可以做其他事情。

 

3. 选择器

    Java NIO的选择器允许一个单独的线程来监视多个输入通道。

原文地址:https://www.cnblogs.com/jiqianqian/p/6568127.html