IO & NIO

IO 和 NIO 的区别

  • IO面向流,阻塞IO

  • NIO面向缓冲,非阻塞IO,选择器

可简单认为:IO是面向流的处理,NIO是面向块(缓冲区)的处理

NIO主要有三个核心部分组成

  • buffer缓冲区(本质是数组)

  • Channel管道

  • Selector选择器

    • Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

buffer缓冲区和Channel管道

在NIO中并不是以流的方式来处理数据的,而是以buffer缓冲区和Channel管道配合使用来处理数据。

NIO就是通过Channel管道运输着存储数据的Buffer缓冲区的来实现数据的处理

Channel不与数据打交道,它只负责运输数据。与数据打交道的是Buffer缓冲区

Channel-->运输,Buffer-->数据

相对于传统IO而言,流是单向的。对于NIO而言,有了Channel管道这个概念,我们的读写都是双向

 

NIO优势

  • 速度快,使用mmap虚拟内存映射对文件内容进行修改

  • 资源占用少,复用线程,线程开支变少

posted @ 2022-02-16 21:57  huiyii  阅读(49)  评论(0编辑  收藏  举报