JAVA NIO(一)概述

1.简介

Java NIO(New IO | NON-Blocking IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),NIO与原来的IO有同样的作用和目的,但Java NIO提供了与标准IO不同的IO工作方式。

    Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理。

    简而言之,Channel 负责传输, Buffer 负责存储。

2.概念

Java NIO: Channels and Buffers(通道和缓冲区) 
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
Java NIO: Non-blocking IO(非阻塞IO) 
Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
Java NIO: Selectors(选择器) 
Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

 

3. NIO 与传统IO 的区别:

IO:面向流;阻塞式 IO;单向。

NIO:面向缓冲区;非阻塞IO;选择器;双向。(好处:更加高效,数据的处理更加多样化)

 

面向流:Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。  

 

面向缓冲区:Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

4. 阻塞与非阻塞:

是针对于网络通讯而言。应用程序在获取网络数据的时候,根据IO操作的就绪状态来采取的不同方式。说白了是一种读取或者写入操作函数的实现方式。

(运行一个应用程序,就启动了一个用户进程,操作系统的核心是内核进程)

阻塞:应用程序在获取网络数据的时候,如果网络传输数据很慢,那么程序就一直等着,直到传输完毕为止。

非阻塞:应用程序直接获取数据无需等待。读取或者写入函数会立即返回一个状态值。

5. 同步与异步:

是针对应用程序和内核的交互而言的。

同步:用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪。即应用程序直接参与 IO读写。

异步:用户进程触发IO操作以后便开始做自己的事情,IO操作交由内核进程完成,而当IO操作已完成的时用户进程会得到内核进程 IO完成的通知。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值