iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >NIO的概念有哪些
  • 616
分享到

NIO的概念有哪些

2023-06-17 12:06:40 616人浏览 八月长安
摘要

这篇文章主要介绍了NIO的概念有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nio的概念有哪些文章都会有所收获,下面我们一起来看看吧。缓冲区(Buffers) 新的 Buffer 类是常规 Java 类和

这篇文章主要介绍了NIO的概念有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nio的概念有哪些文章都会有所收获,下面我们一起来看看吧。

缓冲区(Buffers)

新的 Buffer 类是常规 Java 类和通道之间的纽带。原始数据元素组成的固定长度数组,封装在包含状态信息的对象中,存入缓冲区。缓冲区提供了一个会合点:通道既可提取放在缓冲区中的数据(写),也可向缓冲区存入数据供读取(读)。此外,还有一种特殊类型的缓冲区,用于内存映射文件。

通道(Channels)

NIO 新引入的最重要的抽象是通道的概念。Channel 对象模拟了通信连接,管道既可以是单向的(进或出),也可以是双向的(进和出)。可以把通道想象成连接缓冲区和 I/O 服务的捷径

文件锁定和内存映射文件(File locking and memory-mapped files)

新的 FileChannel 对象包含在 java.nio.channels 软件包内,提供许多面向文件的新特 性,其中最有趣的两个是文件定和内存映射文件。
在多个进程协同工作的情况下,要协调各个进程对共享数据的访问,文件锁定是必不可少的工具

将文件映射到内存,这样在您看来,磁盘上的文件数据就像是在内存中一样。这利用了操作系统的虚拟内存功能,无需在内存中实际保留一份文件的拷贝,就可实现文件内容的动态高速缓存

套接字(Sockets)

套接字通道类为使用网络套接字实现交互提供了新方法。套接字通道可工作于非块模式,并可与选择器一同使用。因此,多个套接字可实现多路传输,管理效率也比 java.net 提供的传统套接字更高。三个新套接字通道,即 ServerSocketChannel、SocketChannel 和 DatagramChannel

选择器(Selectors)

选择器可实现就绪性选择。Selector 类提供了确定一或多个通道当前状态的机制。使用选择 器,借助单一线程,就可对数量庞大的活动 I/O 通道实施监控和维护。

正则表达式(Regular expressions)

新增的 java.util.regex 软件包将类似 Perl 语言的正则表达式处理机制引入 Java。这一人 们期盼已久的特性有着广泛用途。

新的正则表达式 api 之所以被看成是 NIO 的组成部分,是因 jsR 51 把它与其他 NIO 特性放在一起作了详细说明。虽然它在许多方面与 NIO 的其他组成部分缺乏平行关系,但它在文件处理等众多领域都是极其有用的。

字符集(Character sets)
java.nio.charsets 提供了新类用于处理字符与字节流之间的映射关系。您可以对字符转换映射方式进行选择,也可以自己创建映射。

磁盘I/O的示例

NIO的概念有哪些

图中明显忽略了很多细节,仅显示了涉及到的基本步骤。

如图

注意图中用户空间和内核空间的概念。用户空间是常规进程所在区域。JVM 就是常规进程,驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。内核空间是操作系统所在区域。内核代码有特别的权力:它能与设备控制器通讯,控制着用户区域进程的运行状态,等等。最重要的是,所有 I/O 都直接(如这里所述)或间接(见 1.4.2 小节)通过内核空间。

当进程请求 I/O 操作的时候,它执行一个系统调用(有时称为陷阱)将控制权移交给内核。C/C++程序员所熟知的底层函数 open( )、read( )、write( )和 close( )要做的无非就是建立和执行适当 的系统调用。当内核以这种方式被调用,它随即采取任何必要步骤,找到进程所需数据,并把数据传送到用户空间内的指定缓冲区。内核试图对数据进行高速缓存或预读取,因此进程所需数据可能已经在内核空间里了。如果是这样,该数据只需简单地拷贝出来即可。如果数据不在内核空间,则进程被挂起,内核着手把数据读进内存。

看了图 1-1,您可能会觉得,把数据从内核空间拷贝到用户空间似乎有些多余。为什么不直接让磁盘控制器把数据送到用户空间的缓冲区呢?这样做有几个问题。首先,硬件通常不能直接访问用户空间 1。其次,像磁盘这样基于块存储的硬件设备操作的是固定大小的数据块,而用户进程请求的可能是任意大小的或非对齐的数据块。在数据往来于用户空间与存储设备的过程中,内核负责数据的分解、再组合工作,因此充当着中间人的角色。

发散/汇聚

NIO的概念有哪些

许多操作系统能把组装/分解过程进行得更加高效。根据发散/汇聚的概念,进程只需一个系统调用,就能把一连串缓冲区地址传递给操作系统。然后,内核就可以顺序填充或排干多个缓冲区,读的时候就把数据发散到多个用户空间缓冲区,写的时候再从多个缓冲区把数据汇聚起来这样用户进程就不必多次执行系统调用(那样做可能代价不菲),内核也可以优化数据的处理过程,因为它已掌握待传输数据的全部信息。如果系统配有多个 CPU,甚至可以同时填充或排干多个缓冲区。

虚拟内存

所有现代操作系统都使用虚拟内存。虚拟内存意为使用虚假(或虚拟)地址取代物理(硬件RAM)内存地址。这样做好处颇多,总结起来可分为两大类:

一个以上的虚拟地址可指向同一个物理内存地址。

虚拟内存空间可大于实际可用的硬件内存。

设备控制器不能通过 DMA 直接存储到用户空间,但通过利用上面提到的***项,则可以达到相同效果。把内核空间地址与用户空间的虚拟地址映射到同一个物理地址,这样,DMA 硬件(只能访问物理内存地址)就可以填充对内核与用户空间进程同时可见的缓冲区

NIO的概念有哪些

如图,进程虚拟内存和内核虚拟内存映射到的物理地址都一样,这样DMA写到实际的物理内存后,两个缓冲区指向的物理地址都一样,那么他们就同时能访问到数据了。

但前提条件是,内核与用户缓冲区必须使用相同的页对齐,缓冲区的大小还必须是磁盘控制器块大小(通常为 512 字节磁盘扇区)的倍数。操作系统把内存地址空间划分为页,即固定大小的字节组。内存页的大小总是磁盘块大小的倍数,通常为 2 次幂(这样可简化寻址操作)。典型的内存页为 1,024、2,048 和 4,096 字节。虚拟和物理内存页的大小总是相同的。

NIO的概念有哪些

如上图显示了来自多个虚拟地址的虚拟内存页是如何映射到物理内。

内存页面调度

为了支持虚拟内存的第二个特性(寻址空间大于物理内存),就必须进行虚拟内存分页(经常称为交换,虽然真正的交换是在进程层面完成,而非页层面)。依照该方案,虚拟内存空间的页面能够继续存在于外部磁盘存储,这样就为物理内存中的其他虚拟页面腾出了空间。从本质上说,物理内存充当了分页区的高速缓存;而所谓分页区,即从物理内存置换出来,转而存储于磁盘上的内存页面。

关于“NIO的概念有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“NIO的概念有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: NIO的概念有哪些

本文链接: https://www.lsjlt.com/news/288801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • NIO的概念有哪些
    这篇文章主要介绍了NIO的概念有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇NIO的概念有哪些文章都会有所收获,下面我们一起来看看吧。缓冲区(Buffers) 新的 Buffer 类是常规 Java 类和...
    99+
    2023-06-17
  • J2SE的基本概念有哪些
    这篇文章主要讲解了“J2SE的基本概念有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“J2SE的基本概念有哪些”吧!Java概述:  目前Java主要应用于中间件的开发(middlewa...
    99+
    2023-06-03
  • Java变量的概念有哪些
    本篇内容主要讲解“Java变量的概念有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java变量的概念有哪些”吧!实例变量实例变量又被称为Instance variables。不使用 sta...
    99+
    2023-06-16
  • Jspxcms的基本概念有哪些
    这篇文章主要介绍“Jspxcms的基本概念有哪些”,在日常操作中,相信很多人在Jspxcms的基本概念有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jspxcms的基本概念有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • HTML基本的概念有哪些
    这篇文章主要介绍“HTML基本的概念有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML基本的概念有哪些”文章能帮助大家解决问题。   1、什么是HTML...
    99+
    2024-04-02
  • Java多态的概念有哪些
    这篇“Java多态的概念有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java多态的概念有哪些”文章吧。1.多态的概念...
    99+
    2023-06-30
  • Hadoop相关概念有哪些
    这篇文章主要讲解了“Hadoop相关概念有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hadoop相关概念有哪些”吧!一、大数据的基本概念1.1、什么是大数据  大数据指的就是要处理的...
    99+
    2023-06-03
  • HDFS基本概念有哪些
    小编给大家分享一下HDFS基本概念有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  1.1 HDFS的介绍  源自于Google的GFS论文 发表于2003...
    99+
    2023-06-02
  • Java基本概念有哪些
    这篇文章给大家分享的是有关Java基本概念有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java基本概念JDK包含了不少Java开发相关命令。如,javac、java、javap、javaw、javadoc...
    99+
    2023-06-20
  • Python Web编程的概念有哪些
    本篇内容主要讲解“Python Web编程的概念有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python Web编程的概念有哪些”吧!1. 传统的Web Server应该具备的功能◆ 监...
    99+
    2023-06-17
  • TypeScript中的重要概念有哪些
    这篇文章主要介绍了TypeScript中的重要概念有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TypeScript中的重要概念有哪些文章都会有所收获,下面我们一起来看看吧。Typescript中的几个重...
    99+
    2023-06-27
  • Css3的概念和优势有哪些
    这篇文章主要介绍“Css3的概念和优势有哪些”,在日常操作中,相信很多人在Css3的概念和优势有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Css3的概念和优势有哪些”...
    99+
    2024-04-02
  • C++中的函数概念有哪些
    这篇文章主要介绍“C++中的函数概念有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中的函数概念有哪些”文章能帮助大家解决问题。(一)函数使用规则函数的定义不能嵌套但调用可以嵌套在函数调用...
    99+
    2023-06-29
  • JVM调优概念都有哪些
    今天给大家介绍一下JVM调优概念都有哪些。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本...
    99+
    2023-06-17
  • Windows安全相关的概念有哪些
    Windows安全相关的概念有以下几个: 访问控制:访问控制是指限制用户或进程对系统资源的访问。Windows系统通过用户帐户和...
    99+
    2023-10-23
    Windows
  • Kubernetes消息队列的概念有哪些
    这篇文章主要介绍“Kubernetes消息队列的概念有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Kubernetes消息队列的概念有哪些”文章能帮助大家解决问题。服务质量服务语义服务质量一般...
    99+
    2023-06-05
  • CSS常用核心概念有哪些
    这篇文章主要介绍了 CSS常用核心概念有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 CSS常用核心概念有哪些文章都会有所收获,下面我们一起来看看吧。CSS 中最核心的几...
    99+
    2024-04-02
  • CSS中尺寸单位的概念有哪些
    这篇文章主要介绍“CSS中尺寸单位的概念有哪些”,在日常操作中,相信很多人在CSS中尺寸单位的概念有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中尺寸单位的概念有...
    99+
    2024-04-02
  • PHP面试题之概念题有哪些
    这篇文章主要介绍PHP面试题之概念题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. HTTP 状态中状态码的含义302:临时转移成功,请求的内容已转移到新位置 。401:未授权。403:禁止访问 。500:...
    99+
    2023-06-14
  • MongoDB数据库基本概念有哪些
    这篇“MongoDB数据库基本概念有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MongoDB数据库基本概念有哪些”文...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作