Java NIO 详解(一)

      NIO提供了一个全新的底层的I/O层模型。与最初的java.io包中面向留(Stream-oriented)的概念不同,NIO采用了面向块的概念(block-oriented)。这意味着尽可能的情况下,I/O操作以大的数据块为单位进行,而不是一次一个字节或字符进行

    

       NIO中提供了与平台无光的非阻塞I/O(nonblocking I/O)。与面向线程的、阻塞式I/O方式相比,多道通信、非阻塞I/O技术可以使应用程序更有效地处理大量连接的情况

 

       IO的阻塞操作

       在传统I/O操作中接收键盘数据的操作时只要执行到readLine()方法,程序就要停止等待用户输入数据;在网络编程中服务器端使用ServerSocket类的accept()方法时,服务器一直处于等待操作,要等待客户端连接。这两类都属于阻塞操作,因为都会让程序暂停执行

       

       缓存区与Buffer

       在基本IO操作中所有操作都是直接已流的形式完成的,而在NIO中所有的操作都要使用缓存区处理,且所有的读写操作都是通过缓存区完成的。缓存区(Buffer)是一个线性的、有序的数据集,只能容纳某种特定的数据类型

 

       通道 Channel

       通道可以用来读取和写入数据,通道类似之前的输入/输出流,但是程序不会直接操作通道,所有的内容都是先读到或写入缓冲区中,在通过缓冲区中取得或写入

       通道与传统的流操作不同,传统的流操作分为输入或输出流,而通道本身是双向操作的,既可以完成输入也可以完成输出  

       

         图:  通道的操作流程

       

        Selector

        在新IO中Selector是一个极其重要的概念,在原来使用IO和Socket构造网络服务时,所有的网络服务将使用阻塞的方式进行客户端的连接,而如果使用了新IO则可以构造一个非阻塞的网络服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值