在学习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比较相关推荐

  1. java中的nio_Java中的NIO基础知识

    上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors.本文主要介绍着三个 ...

  2. Java IO模型:BIO、NIO、AIO讲解

    文章目录 IO 首先:什么是IO? 为什么要改进IO? BIO.NIO.AIO BIO NIO NIO实现原理 Channel(通道) : Buffer(缓冲区): Selector(选择器) : A ...

  3. Java IO框架之BIO、NIO、AIO

    我是傲骄鹿先生,沉淀.学习.分享.成长. 如果你觉得文章内容还可以的话,希望不吝您的「一键三连」,文章里面有不足的地方希望各位在评论区补充疑惑.见解以及面试中遇到的奇葩问法 目录 一.概述 二.BIO ...

  4. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  5. java关闭io流_Java IO流关闭问题的深入研究

    前言 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 1.包装流的close方法是否会自动关闭被包装的流? 答:会. 2.关闭流方法是否有顺 ...

  6. Java 非阻塞 IO 和异步 IO

    转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...

  7. 图学java基础篇之IO

    java io体系 如图可以看出,java的io按照包来划分的话可以分为三大块:io.nio.aio,但是从使用角度来看,这三块其实揉杂在一起的,下边我们先来概述下这三块: io:主要包含字符流和字节 ...

  8. 【JAVA基础篇】IO流

    一.流的概念 "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务." ――<Think in Java> 无论是系统.还是语言的设计中IO的设计都是异常复 ...

  9. Java aio(异步网络IO)初探

    http://www.iteye.com/topic/472333 按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO和异步IO,按照POSIX ...

  10. Java学习——Day13:IO流

    6.1 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身, ...

最新文章

  1. BootISO:从 ISO 文件中创建一个可启动的 USB 设备
  2. 解析:为什么人工智能要用Python?
  3. python多态_Python基础入门18节-第十六节 面向对象如何理解多态
  4. react学习(10)----react数组定义 从0开始 直接加个0下标空
  5. mybatis resultMap type属性问题 ( xx.xx.PO cannot be cast to xx.xx.BO)
  6. Delphi 两种类的声明方法
  7. 爬虫python能做什么-python爬虫能干什么
  8. 给JDK设置tmp目录的办法
  9. 计算机技术比武通讯报道,第十六届后勤优质服务月:各部门积极开展技能比武,强化岗位技能,提升服务水平...
  10. 电脑检测工具eve_检测电脑硬件的软件(系统硬件检测工具)
  11. Win11如何开启移动热点?Win11开启移动热点的方法
  12. fastposter 1.6.0 发布 电商级海报生成器
  13. 媲美微信的二维码识别库
  14. 实现php Curl 调用不同项目中方法
  15. 肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC
  16. shell遍历多个数组
  17. 招聘网站的几个新控件(2)
  18. 我的EeePC 700,你快回来啊
  19. 固态硬盘、机械硬盘工作原理和区别(内附接口知识)
  20. hihocoder-1565-大富翁

热门文章

  1. 雷云3 Razer Synapse官方版-雷云3 Razer Synapse官方版下载
  2. 数据地图搜索功能模块项目总结【springBoot+Elasticsearch】
  3. 8086汇编语言:8086CPU寄存器的相关介绍
  4. springboot+Layui后台管理系统
  5. Java MD5 加密工具类 生成32位加密码值
  6. MIMO系统的信号检测
  7. H3C如何配置raid1
  8. 闲置手机制作电脑副屏-状态监控(含软件)
  9. 【数据结构】图的基础练习题目,及题解
  10. 使用ydui框架报错[Vue warn]: Invalid prop: custom validator check failed for prop color.