• 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管道这个概念,我们的读写都是双向

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

  • 相关阅读:
    Codeforces Round #632 (Div. 2)
    Educational Codeforces Round 83 E. Array Shrinking
    Codeforces Round #626 D. Present
    I
    java学习-get和post请求
    java学习-MD5消息摘要算法
    分销系统数据库设计
    java获得当前日期是今年的第几周,以及这周的开始日期的方法
    分销系统的用户关系,用户与推广链接的数据库设计。设计思路
    git工具,conflict冲突解决方法
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14954031.html
Copyright © 2020-2023  润新知