NIO 教程

NIO 教程

原文: https://howtodoinjava.com/java-nio-tutorials/

Java NIO(新 IO)是 Java 的替代 IO API(来自 Java 1.4),意味着可以替代标准 Java IO API。 与标准 IO API 相比,Java NIO 提供了另一种使用 IO 的方式。 在此页面中,我将列出此博客中与 NIO 相关的所有可用帖子。

java nio

学习 NIO 的先决条件

Java I/O 在较低级别内部如何工作?

这篇博客文章主要讨论与 I/O 相关的事物在较低级别的工作方式。 这篇文章供那些想知道如何在机器级别映射 Java I/O 操作的读者使用; 以及您的应用程序在运行时,硬件在所有时间内的所有工作。 我假设您熟悉基本的 IO 操作,例如读取文件,通过 Java I/O API 写入文件; 因为那超出了这篇文章的范围。

标准 IO 和 NIO 之间的差异

在本教程中,我将专注于确定最明显的区别,在决定在下一个项目中使用哪个区别之前,您必须知道这些区别。

NIO 基础知识

如何在 Java NIO 中定义路径

如果您的应用程序使用 NIO,则应了解有关此类中可用特性的更多信息。 在本教程中,我列出了在 NIO 中创建Path的 6 种方法。

NIO 缓冲区

缓冲区类是构建java.nio的基础。 在本教程中,我们将仔细研究缓冲区,发现各种类型,并学习如何使用它们。 然后,我们将了解java.nio缓冲区与java.nio.channels的通道类之间的关系。

NIO 通道

通道是继缓冲区之后的java.nio的第二项重大创新,我们在我之前的教程中已详细了解到。 通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通常是文件或套接字)之间有效传输数据的介质。 通常,通道与操作系统文件描述符具有一对一的关系。 通道类提供了维持平台独立性所需的抽象,但仍可以对现代操作系统的本机 I/O 能力进行建模。 通道是网关,通过它可以以最小的开销访问操作系统的本机 I/O 服务,而缓冲区是通道用来发送和接收数据的内部端点。

如何在应用程序中使用 NIO

使用 NIO 逐行读取文件

在本文中,我将举例说明一个非常有用的日常编程任务,即使用 Java IO 逐行读取文件并执行一些行操作。 在继续之前,请允许我提及本文中所有示例中将要阅读的文件内容。

我将逐行读取文件的内容,并检查是否有任何行包含单词"password",然后进行打印。

3 种使用 Java NIO 读取文件的方法

在这篇文章中,我展示了几种从文件系统读取文件的方法。

如何在通道之间传输数据?

与通常在输入源和输出目标之间发生 IO 的普通 Java 应用程序一样,在 NIO 中,您也可能需要非常频繁地将数据从一个通道传输到另一通道。 文件数据从一个地方到另一个地方的批量传输非常普遍,以至于FileChannel类添加了两种优化方法,以使其效率更高。

让我们了解这些方法。

内存映射文件和MappedByteBuffer

内存映射的 I/O 使用文件系统来建立从用户空间直接到适用文件系统页面的虚拟内存映射。 使用内存映射文件,您可以假装整个文件都在内存中,并且可以通过将其视为一个非常大的数组来访问它。 这种方法极大地简化了您为修改文件而编写的代码。

分散/收集或向量 IO

从通道读取的散射是将数据读取到多个缓冲区中的读取操作。因此,通道将来自通道的数据分散到多个缓冲区中。对通道的聚集写入是一种将来自多个缓冲区的数据写入单个通道的写入操作。因此,通道将来自多个缓冲器的数据收集到一个通道中。 在需要分别处理传输数据的各个部分的情况下,分散/收集可能非常有用。

参考:

http://docs.oracle.com/javase/tutorial/essential/io/fileio.html