java io和nio_Java IO与NIO比较
在学习NIO之前,有必要将它与Java IO进行比较,以了解两个包之间的差别。
下面表格列出了Java IO和NIO之间的主要区别:
IO
NIO
基于阻塞I/O操作
基于非阻塞I/O操作
面向流的
面向缓存的
通道不可用
通道可用于非阻塞I/O操作
选择器不可用
选择器可用于非阻塞I/O操作
阻塞与非阻塞I/O
阻塞I/O
阻塞IO等待数据写入或返回前的读取。Java IO的各种流是阻塞的。这意味着当线程调用write()或read()时,线程会被阻塞,直到有一些数据可用于读取或数据被完全写入。
非阻塞I/O
非阻塞IO不等待返回前读取或写入数据。 Java NIO非阻塞模式允许线程请求向通道写入数据,但不等待它被完全写入。允许线程继续进行,并做其他事情。
面向流与面向缓冲
面向流
Java IO是面向流的I/O,这意味着我们需要从流中读取一个或多个字节。它使用流来在数据源/槽和java程序之间传输数据。使用此方法的I/O操作较慢。
下面来看看在Java程序中使用输入/输出流的数据流图:
面向缓冲
Java NIO是面向缓存的I/O方法。 将数据读入缓冲器,使用通道进一步处理数据。 在NIO中,使用通道和缓冲区来处理I/O操作。
通道和流之间的主要区别是:
流可以用于单向数据传输。
通道提供双向数据传输。
因此,通过在java NIO中引入通道,可以执行非阻塞I/O操作。
下面看看通道,缓冲区,java程序,数据源和数据接收器之间的相互作用 -
通道(Channels)
在Java NIO中,通道是在实体和字节缓冲区之间有效传输数据的媒介。 它从一个实体读取数据,并将其放在缓冲区块中以供消费。
通道作为Java NIO提供的网关来访问I/O机制。通常,通道与操作系统文件描述符具有一对一关系,用于提供平台独立操作功能。
NIO通道基础
通道使用本地代码执行实际工作。通道接口允许我们以便携和受控的方式访问低级I/O服务。
在层次结构的顶部,通道接口如下所示:
package java.nio.channels;
public interface Channel{
public boolean isclose();
public void Open() throws IOException;
}
正如在上述通道接口中看到的,所有通道中有常见的两个操作:
检查通道是否关闭(isclose())
打开关闭通道(close())
选择器(Selectors)
在Java NIO中,选择器是可选择通道的多路复用器,可用作可以进入非阻塞模式的特殊类型的通道。它可以检查一个或多个NIO通道,并确定哪个通道准备好进行通信,即读取或写入。
选择器(Selectors)的用途是什么?
选择器用于使用单个线程处理多个通道。因此,它需要较少的线程来处理这些通道。
线程之间的切换对于操作系统来说是昂贵的。 因此,为了提高系统效率选择器是有用的。
下面来看看使用选择器来处理3个通道的线程的示意图:
创建选择器
可以通过调用Selector.open()方法创建一个选择器,如下代码所示:
Selector selector = Selector.open();
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
java io和nio_Java IO与NIO比较相关推荐
- java中的nio_Java中的NIO基础知识
上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors.本文主要介绍着三个 ...
- Java IO模型:BIO、NIO、AIO讲解
文章目录 IO 首先:什么是IO? 为什么要改进IO? BIO.NIO.AIO BIO NIO NIO实现原理 Channel(通道) : Buffer(缓冲区): Selector(选择器) : A ...
- Java IO框架之BIO、NIO、AIO
我是傲骄鹿先生,沉淀.学习.分享.成长. 如果你觉得文章内容还可以的话,希望不吝您的「一键三连」,文章里面有不足的地方希望各位在评论区补充疑惑.见解以及面试中遇到的奇葩问法 目录 一.概述 二.BIO ...
- java epoll select_Java 非阻塞 IO 和异步 IO
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...
- java关闭io流_Java IO流关闭问题的深入研究
前言 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 1.包装流的close方法是否会自动关闭被包装的流? 答:会. 2.关闭流方法是否有顺 ...
- Java 非阻塞 IO 和异步 IO
转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...
- 图学java基础篇之IO
java io体系 如图可以看出,java的io按照包来划分的话可以分为三大块:io.nio.aio,但是从使用角度来看,这三块其实揉杂在一起的,下边我们先来概述下这三块: io:主要包含字符流和字节 ...
- 【JAVA基础篇】IO流
一.流的概念 "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务." ――<Think in Java> 无论是系统.还是语言的设计中IO的设计都是异常复 ...
- Java aio(异步网络IO)初探
http://www.iteye.com/topic/472333 按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO和异步IO,按照POSIX ...
- Java学习——Day13:IO流
6.1 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身, ...
最新文章
- BootISO:从 ISO 文件中创建一个可启动的 USB 设备
- 解析:为什么人工智能要用Python?
- python多态_Python基础入门18节-第十六节 面向对象如何理解多态
- react学习(10)----react数组定义 从0开始 直接加个0下标空
- mybatis resultMap type属性问题 ( xx.xx.PO cannot be cast to xx.xx.BO)
- Delphi 两种类的声明方法
- 爬虫python能做什么-python爬虫能干什么
- 给JDK设置tmp目录的办法
- 计算机技术比武通讯报道,第十六届后勤优质服务月:各部门积极开展技能比武,强化岗位技能,提升服务水平...
- 电脑检测工具eve_检测电脑硬件的软件(系统硬件检测工具)
- Win11如何开启移动热点?Win11开启移动热点的方法
- fastposter 1.6.0 发布 电商级海报生成器
- 媲美微信的二维码识别库
- 实现php Curl 调用不同项目中方法
- 肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC
- shell遍历多个数组
- 招聘网站的几个新控件(2)
- 我的EeePC 700,你快回来啊
- 固态硬盘、机械硬盘工作原理和区别(内附接口知识)
- hihocoder-1565-大富翁
热门文章
- 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
- 数据地图搜索功能模块项目总结【springBoot+Elasticsearch】
- 8086汇编语言:8086CPU寄存器的相关介绍
- springboot+Layui后台管理系统
- Java MD5 加密工具类 生成32位加密码值
- MIMO系统的信号检测
- H3C如何配置raid1
- 闲置手机制作电脑副屏-状态监控(含软件)
- 【数据结构】图的基础练习题目,及题解
- 使用ydui框架报错[Vue warn]: Invalid prop: custom validator check failed for prop color.