JAVA语言 NIO的工作机制和实现原理介绍
小标 2019-01-18 来源 : 阅读 1533 评论 0

摘要:本文主要向大家介绍了JAVA语言 NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言 NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


前言


本文只简单介绍NIO的原理实现和基本工作流程


I/O和NIO的本质区别


NIO将填充和提取缓冲区的I/O操作转移到了操作系统


I/O 以流的方式处理数据,而 NIO 以缓冲区的方式处理数据;IO是阻塞的,NIO是非阻塞的,直到有数据被读取或者数据完全写入时,IO线程才开始执行操作,而NIO在如何情况都是非阻塞的


通道(Channel)和缓冲区(Buffer)


NIO三个核心对象:通道(Channel)、缓冲区(Buffer)和选择器(Selector)


缓冲区只暂时储存数据,通道用于读取和写入操作,作用相当于IO流,与IO流不同的是通道是双向的。


NIO操作中,从通道读取的数据必须先放在缓冲区中,发送给通道的数据也先放在缓冲区中。


NIO通道


通道:通道是一个对象,可以通过它读取和写入数据,可以理解为是对原I/O包中的流的模拟。


通道和流的区别在于通道是双向。通道可以用于读、写或者同时用于读写,而流只有一个方向,即一个流必须是InputStream的子类或者OutputStream的子类。


FileChannel:从文件中读写数据。 DatagramChannel:能通过UDP读写网络中的数据。 SocketChannel:能通过TCP读写网络中的数据。 ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个Socke Channel。


NIO缓冲区


缓冲区:缓冲区实质上是一个数组。最常用的缓冲区类型是ByteBuffer,对应Java的基本类型都有一种缓冲区区


缓冲区类型:


- ByteBuffer


- CharBuffer


- ShortBuffer


- IntBuffer


- LongBuffer


- FloatBuffer


- DoubleBuffer


NIO选择器


选择器(Selector):选择器用于监听多个通道的事件。Selector允许单线程处理多个 Channel。也就是说可以注册多个通道,使用同一个选择器,只要开一条线程就可以执行


NIO读写操作


NIO读取过程:先创建一个缓冲区,通道读取数据放在这个缓冲区


graph LR

 

Channel-->Buffer

   


NIO写入过程:也是先创建一个缓冲区,里面有储存数据的话,将这些数据发给管道执行写入操作


graph LR

Buffer-->Channel

   


文件读取操作


读取文件过程:从FileInputStream获取Channel,创建Buffer,将数据从Channel读到Buffer中


//从FileInputStream获取通道

FileInputStream fis = new FileInputStream( "readandshow.txt" );

FileChannel fc = fis.getChannel();

//创建缓冲区

ByteBuffer buffer = ByteBuffer.allocate( 1024 );

//将数据从通道读到缓冲区

fc.read( buffer );

   


文件写入过程

   

FileOutputStream fout=new FileOutputStream("write.txt");

FileChannel fc=fout.getChannel();

ByteBuffer buffer=ByteBuffer.allocate(1024);

for (int i=0; i

   


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved