大数据基础NIO-什么是NIO?NIO三大组件Buffer、Channel、Selector的特点

一、NIO简介


1、Java中的IO介绍

    BIO:BlockingIO,同步式阻塞式IO,即传统的IO,是Java中最早期的流
    NIO:Non-BlockingIO,又称New IO,同步式非阻塞式IO,是JDK1.4提供的流
    AIO:AsynchronousIO,异步式非阻塞式IO,可以认为是NIO的二代版本,是JDK1.8提供的流

2、概述

    NIO是JDK1.4出现的一个新的用于进行数据传输的流
    全称是Non-Blocking IO,是一种同步式非阻塞式的IO,也是一种能供进行多路复用的IO
    NIO中有3大组件:Buffer、Channel、Selector
    NIO在使用的时候可以基于事件驱动方式来实现

3、BIO的缺点

    一对一的连接方式:即每一个连接请求需要对应一个线程,在请求量大的情况下,会导致服务器端的压力非常大从而致使整个服务器的处理效率变低
    阻塞:当线程在进行read或者write的时候,除非读完或者写完,否则在这个过程中不能发生任何操作
    单向传输:数据只能从一端传向另一端,如果需要反向传输需要令创建流对象

4、NIO的特点

    一对多的连接方式:利用一个或者少量线程处理大量的连接请求,降低服务器端的压力
    非阻塞:在线程不能进行read或者write方法的时候,立即返回0,等待下一次操作
    双向传输:利用通道可以实现数据的双向

5、NIO的缺点

    在请求量比较大的情况下会出现部分请求的响应时间比较长的现象
    不适用于长任务场景,不然会导致其他的请求无法处理

6、BIO和NIO的比较

BIO
NIO
同步阻塞
同步非阻塞

单向传输数据

可以双向传输数据

一对一的连接方式

一对多的连接方式

面向流操作

面向缓冲区操作

适合于请求少、长连接场景

适合于大量请求、短连接的场景

二、Buffer缓冲区


1、Buffer简介

      特点

    Buffer又称之为缓冲区,是用于存储数据的容器
    本质上是一个数组,在内存中占用了一块连续的空间
    Java中针对不同的基本类型提供了不同的缓冲区(但需注意的是没有boolean类型对应的缓冲区)
    其中最基本的字节缓冲区ByteBuffer

2、ByteBuffer字节缓冲区

      概述

    字节缓冲区,继承了Buffer类
    底层是依靠字节数组来存储数据
    本身是一个抽象类,需要利用其子类创建对象或者是利用其提供的allocate或者是wrap方法来创建ByteBuffer对象
    重要位置:capacity >= limit >= position >= mark

       重要位置

    capacity:容量位。用于标记该缓冲区的容量,在缓冲区创建好之后就不再改变
    limit:限制位。用于限制操作位position所能达到的最大位置。在缓冲区刚创建的时候指向容量位
    position:操作位。用于指向要操作的位置,实际意义类似于数组中的下标。在缓冲区刚创建的时候指向0
    mark:标记位。用于进行标记。在缓冲区刚创建的时候指向-1,默认不启用

三、Channel通道


 

1、Channel简介

    Channel,称之为通道,在NIO中用于完成数据的传输
    在操作的时候是面向缓冲区进行的
    可以实现数据的双向传输
    Channel默认是阻塞的,可以手动设置为非阻塞

2、FileChannel介绍

    FileChannel,是面向文件的通道
    可以利用FileChannel完成对文件的读写操作
    利用FileChannel读取文件的时候,是先将文件中的内容映射到虚拟内存中,然后再读取到程序的缓冲区中
    FileChannel不能直接创建,可以利用FileInputStream、FileOutputStream、RandomAccessFile对象中的个体Channel()方法获取
    如果是通过FileInputStream获取FileChannel,那么只能进行读取操作
    如果是通过FileOutputStream获取FileChannel,那么只能进行写入操作
    如果是通过RandomAccessFile获取FileChannel,那么可以进行读写操作

3、UDP概述

    用于进行UDP收发的通道
    是无连接的网络协议,只能进行发送和接受的操作
    基本类是DatagramChannel,是一个抽象类

4、TCP概述

    用于进行TCP通信的通道
    需要进行连接的网络协议
    提供了连接、接收、读取、写入操作
    客户端通道是SocketChannel,服务器端通道是ServerSocketChannel

5、通道总结

             Channel通道在NIO中用于完成数据的传输,其中FileChannel是文件通道,UDP与TCP是网络传输层的通道。

四、Selector多路复用选择器


一、概述

    Selector 称为多路复用选择器
    对通道进行选择,需要基于事件进行驱动
    针对了四类事件:connect、accept、read、write,四类事件定义在SelectionKey中
    可以实现利用一个或者少量线程处理大量请求
    适用于大量的段任务场景,不适用于长任务场景
    Selector针对的必须是非阻塞的通道(Channel)

 总结不易,期待您的关注,我们一起进步,冲冲冲!!!

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

大数据基础NIO-什么是NIO?NIO三大组件Buffer、Channel、Selector的特点

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 大数据基础NIO-什么是NIO?NIO三大组件Buffer、Channel、Selector的特点
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏