JAVA语言之Java NIO简介
从安 2019-06-06 来源 : 阅读 980 评论 0

摘要:本篇文章主要讲述JAVA语言之Java NIO简介,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述JAVA语言之Java NIO简介,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA语言之Java NIO简介

前面介绍的是传统的IO,在java.io包下。传统的IO有一下缺点:

· 传统的IO是BIO(阻塞式的IO),使用read()系列方法读取数据时,如果没有可读取的数据,会一直阻塞该线程,读取到数据后,线程才继续往下执行。

· 不管是字节流还是字符流,底层都是基于字节实现的,如果不使用缓冲区,会一个字节一个字节地处理,效率极低。

· 读文件时需要从内核空间复制数据到用户空间,写文件时需要把数据从用户空间传递到内核空间,很花时间。

 

Java不具备直接操作硬件的能力,不能直接操作计算机硬件。OS是由C/C++写的,代码执行效率极高,操作硬件能力强。

当Java程序要使用计算机硬件时,比如要使用摄像头,要读写磁盘文件等,是由JVM向OS发出请求,由OS来操作硬件。

 

计算机内存大体可分为2部分:

· 内核空间,运行OS自带的程序,比如说Windows启动程序、资源管理器、注册表等。

· 用户空间,运行用户程序,比如说QQ、酷狗、IDEA等。

这样做的好处是,将系统内核和用户程序分开,即便用户程序出了问题,也不会影响到系统内核,系统内核更加安全。

但也造成了一个问题:用户程序不能直接访问内核空间的数据。 

 

读文件:JVM向OS发出请求 ->  OS把磁盘文件中存储的数据读取到内核空间  -> OS再把这些数据从内核空间复制到用户空间 -> JVM使用用户空间的这些数据。

写文件:JVM向OS发出请求 -> OS把要写的数据从用户空间复制到内核空间 -> OS把这些数据从内核空间写到磁盘文件。

 

JVM是运行在用户空间的一个程序。不能直接访问内核空间的数据。传统的IO进行磁盘文件读写要把数据从内核空间复制到用户空间,或者把数据从用户空间复制到内核空间,会花费大量的时间,尤其是读写的数据量较大时,速度很慢。

 

从JDK1.4开始,Java提供了一系列改进的新IO,称为NIO(New  IO)。新增的IO在java.nio包中,同时也改写了java.io包中的很多类。

NIO可以将内核空间中的文件数据映射到用户空间,不必复制,节省了时间,效率更高。

我们常说NIO是把磁盘文件映射到内存中,从而直接对磁盘文件进行读写,这其实是不准确的,Java不能直接操作硬件,需要借助OS。

 

NIO中的主要类:

· Channel    可以将内核空间中的文件数据映射到用户空间

· Buffer  缓冲区,批量读写数据

· Charset  字符集,用于字符序列的编码、解码

· Selector  提供非阻塞式的IO

 

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!


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

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

我知道了

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

请输入正确的手机号码

请输入正确的验证码

获取验证码

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

提交

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

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

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

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程