【NIO总结】—NIO简介

        NIO是JDK1.4提供的新的IO API,可以代替原来标准的IO API。NIO被称为New IO,又称NonBlocking IO,它和原来的IO有同样的作用和目的,但是使用方式完全不同。NIO对文件的读写操作会更快,因为NIO是面向缓冲区的、基于通道的IO操作。

 

NIO和IO的区别

 

         

 

        IO操作是面向流的,文件的读写都要通过流的形式进行,比如FileInputStream和FileOutputStream;而且它的访问是阻塞的,当程序要访问文件时,如果文件尚未就绪,该线程就会发生阻塞,直至数据准备就绪位置,否则一直等在那里。

 

                                      

 

        但是NIO不会,NIO是面向缓冲区的,它是基于通道操作的。当访问数据时,如果数据没有准备就绪,缓冲区会直接返回,不会一直等待数据就绪。NIO访问数据时,会首先创建一个通道,通道不存储数据,只用来传输;缓冲区是用来存储数据的,它既可以从程序到硬盘文件,也可以从硬盘文件到程序。不仅仅是因为NIO面向缓冲区、基于通道它就可以完全做到非阻塞,而是需要选择器。程序访问时,会将channel注册到选择器上,并监听选择器事件,当事件发生时,才会执行数据操作,而选择器可以注册多个通道,一个通道也可以监听多个选择器事件。

 

                                           

NIO核心内容

 

        从NIO和IO的区别可以看出,NIO系统的核心在于通道(Channel)、缓冲区(Buffer)和选择器(Selector)。

 

        通道:通道表示打开到IO设备(例如:文件、套接字)的连接,如果需要访问某个文件,需要该文件开启通道,相当于打开可以访问的开关。

 

        缓冲区:缓冲区就像一个数组,可以保存多个相同类型的数据,它是一个容器,在NIO系统中主要用于和通道进行交互。数据从通道读入缓冲区,从缓冲区写入通道。

 

        选择器:选择器是SelectableChannel对象的多路复用器,Selector可以同时监控多个SelectableChannel的IO状况,也就是说,利用Selector可以使一个单独的线程管理多个Channel,Selector是非阻塞IO的核心。

 

                                                               

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值