JavaSE:NIO的概念

0.  IO回顾

    <1>  IO:Input Output ( 输入 输出 )

    <2>  IO技术的应用:解决设备和设备之间的数据传输问题

    <3>  IO应用场景:图片上传、下载、打印机打印信息表、解析XML...

1.  概念

    <1>  即 Java New IO

    <2>  是一个全新的、JDK 1.4后提供的 IO API

    <3>  Java API 中提供了两套NIO,一套是针对 标准输入输出 NIO, 另一套就是 网络编程NIO 

2.  作用

    <1>  NIO 和 IO 有相同的作用和目的,但实现方式不同

    <2>  可替代标准 Java IO 的 IO API

    <3>  IO 是以的方式处理数据,而NIO是以块(缓冲区)的方式处理数据

3.  流与块的比较

    <1>  NIO 和 IO 最大的区别是数据打包 和 传输方式

    <2>  IO是以的方式处理数据,而NIO是以的方式处理数据

          面向流的IO一次一个字节的处理数据,一个输入流产生一个字节,一个输出流就消费一个字节

          面向块的IO系统以块的形式处理数据。每一个操作都在一步中,产生或消费一个数据块。 按快要比按流快得多

             举例: 拿水龙头来比喻,流就像水龙头滴水,每次只有一滴

              块就像水龙头往水壶放水,放满之后对一整个水壶的水进行操作

4.  新特性

    对比于 Java IO, NIO具备的新特性如下:

               

     面向流的 I/O 系统:一次一个字节地处理数据    可简单认为:  IO是面向流的处理,NIO是面向块(缓冲区)的处理

     一个面向块(缓冲区)的I/O系统:以块的形式处理数据

5.  核心组件

    Java NIO 的核心组件包括:

      <1>  通道 (Channel)

      <2>  缓冲区 (Buffer)

      <3>  选择器 (Selector)

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

    

 

    Selector是因为NIO可以使用异步的非阻塞模式才加入的东西

          

    

    简单理解一下:
      <1> Channel 管道比作铁路, buffer 缓冲区比作成火车(运载着货物)

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

      <2> 要时刻记住: Channel 不与数据打交道,它只负责运输数据。 与数据打交道的是 Buffer 缓冲区

               Channel  ----> 运输

                Buffer ----> 数据

      <3> 相对于传统IO而言, 流是单向的。 

        对于NIO而言,有了Channel管道这个概念,我们的读写都是双向

        (铁路上的火车能从广州去北京,自然就能从北京返还到广州)

原文地址:https://www.cnblogs.com/JasperZhao/p/14954031.html