标签:NIO 处理 概念 IO 缓冲区 JavaSE 数据 Channel
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具备的新特性如下:
IO | NIO |
面向流(Stream Oriented) | 面向缓冲区(Buffer Oriented) |
阻塞IO(Blocking IO) | 非阻塞IO (Non Blocking IO) |
(无) | 选择器(Selectors) |
可简单认为: IO是面向流的处理,NIO是面向块(缓冲区)的处理
面向流的 I/O 系统:一次一个字节地处理数据
一个面向块(缓冲区)的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管道这个概念,我们的读写都是双向的
(铁路上的火车能从广州去北京,自然就能从北京返还到广州)
标签:NIO,处理,概念,IO,缓冲区,JavaSE,数据,Channel 来源: https://www.cnblogs.com/JasperZhao/p/14954031.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。