专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Nio框架是什么

Nio框架是什么

更新时间:2022-03-29 10:53:31 来源:星辉 浏览1228次

在 IO 之后,java 提供了新的 IO。这也称为 NIO,从 JDK 1.4 开始引入。NIO 带来了许多读取和写入文件、通道和套接字的功能。NIO API 有两代,即 NIO.1 和 NIO.2。在 NIO.1 缓冲区中,引入了 charset 和 channels。在 JDK 7 中,NIO 框架引入了新的包 java.nio.file 等。这些被称为 NIO.2 系列。它是 NIO 框架中的一个度量版本。NIO.2 提供了 Path、Files 等改变了 java 中文件处理方式的类。现在我们将详细了解 NIO 框架,我们提供了页面链接以通过示例获得更好的清晰度。

Nio框架是什么

Java NIO 中的缓冲区

Java NIO 从缓冲区开始。缓冲区是数据的容器。java.nio 包包含所有缓冲区 API。有数据类型特定的缓冲区,如 ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer。java.nio.Buffer 是上面提到的所有数据类型缓冲区扩展的基类。缓冲区是任何特定原始类型的元素序列。缓冲区的基本属性是它的容量、限制和位置,并且缓冲区不是线程安全的。

缓冲区容量

一个缓冲区包含的元素个数就是缓冲区的容量。缓冲区的容量不能为负,并且永远不会改变。

缓冲区限制

这是未读取或未写入的第一个元素的索引。限制不能为负,也不能大于其容量。

缓冲区中的位置

它将被读取或写入的下一个元素的索引。位置不能为负数,也不能大于其限制。

在 Buffer 中标记和重置

在某些时候,通过调用 reset 方法来重置缓冲区的位置。该位置称为标记。reset() 只能在定义了标记且标记未始终定义时调用。如果我们定义了一个标记,并且在某个时候我们将位置和限制调整为低于标记,那么标记将被丢弃。标记、极限、位置和容量之间的关系如下所示。

0 <= 标记 <= 位置 <= 限制 <= 容量

Java NIO Buffer中clear()方法的作用

clear() 方法使缓冲区准备好在读取和相对放置操作中接受新流。它设置了容量限制,并且位置变为零。

java NIO Buffer中flip()方法的作用

flip() 方法使缓冲区在写入和相关获取操作的情况下准备就绪。它将限制设置为当前位置并且位置变为零。

Java NIO Buffer中rewind()方法的作用

rewind() 使缓冲区准备好从缓冲区重新读取数据。在这种情况下,限制保持不变,位置变为零。

Java NIO 中的 BufferUnderflowException

在从当前位置开始的读取操作中,位置会增加被传输元素的数量,如果请求的元素数量超过限制,则相对 get 操作会抛出未经检查的异常,即 java.nio。缓冲区下溢异常。

Java NIO 中的 BufferOverflowException

在写入操作中,请求的元素被放入缓冲区,如果超过限制,则 put 方法抛出未经检查的异常,即 java.nio.BufferOverflowException

现在找到一些 java.nio 包的 API。

ByteBuffer JDK 1.4 中引入了ByteBuffer。ByteBuffer 是字节的缓冲区。ByteBuffer 是抽象类,但它有静态方法。

CharBuffer CharBuffer 是字符的缓冲区。CharBuffer 对象是通过调用 allocate() 创建的。

Java NIO 中的字符集

字符集 API 位于包 java.nio.charset 下。charset 的作用是字节序列和 16 位 unicode 字符之间的命名映射。java nio charsets API 中有编码器和解码器。我们一起称它为编码员。编码器将字符转换为字节,解码器将字节转换为任何特定的字符集。

Charset Charset 在给定的 charset 和 UNICODE 之间起到编码和解码的作用。

CharsetDecoder 和 CharsetEncoder在 java 中,从一个字符集到另一个字符集的编码和解码可以使用 java NIO API 完成。可以将具有任何字符集的 ByteBuffer 更改为 Unicode 字符集的 CharBuffer。

Java 中的通道

NIO 通道位于 java.nio.channels 包中。通道是与文件、套接字或任何硬件设备等实体的开放连接。通道可以异步关闭和中断。有不同类型的渠道。

AsynchronousChannelGroup AsynchronousChannelGroup 在异步通道组中进行资源共享。

Pipe.SinkChannel 和 Pipe.SourceChannel Pipe 确保数据以与写入 Pipe 相同的顺序读取。

FileLock FileLock 锁定或尝试锁定文件的给定部分。

FileChannel FileChannel 保持一个可以修改的当前位置。

ReadableByteChannel通道返回 IO 类。ReadableByteChannel 由 Channels 获取。newChannel(in) 通过传递输入流。

Java NIO 中的文件 API

在 JDK 7 中,NIO.2 已随包 java.nio.file 一起引入。该 API 提供了访问文件、文件属性和文件系统的类。API文档 支持符号链接,即任何文件位置的参考链接。通过 toPath() 方法可以实现 File 和 Path 之间的互操作性。我们将讨论 java.nio.file API 的一些类。

路径和路径 Path的用途是在文件系统中定位文件。Path 可以灵活地通过部分证明路径来定位文件。

文件它可以创建和删除目录以及文件。它还在现有文件和链接目录之间创建链接。

目录流DirectoryStream 遍历文件并返回每个文件的 Path 实例。DirectoryStream 必须在迭代后关闭,否则会出现资源泄漏。

WatchService WatchService 有责任观察所有注册对象的变化。只有 watchable 对象应该注册到 watch 服务来监控变化。

通过上述相信大家对Nio框架已经有了一些了解,如果大家对此比较感兴趣,想了解更多相关知识,不妨来关注一下星辉的NIO视频教程,里面的课程内容通俗易懂,适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>