20.4 使用NIO系统
下面将演示如何应用NIO系统完成各种任务。在开始之前有必要强调一下,随着JDK 7的发布,Java对NIO系统进行了极大扩展。因此,NIO系统的应用也被极大扩展了。前面提到过,这个增强版本有时被称为NIO.2。因为NIO.2添加的特性是如此丰富,以至于它们改变了许多基于NIO的代码的编写方式,并且增加了使用NIO可以完成的任务类型。缘于重要性,本章剩余的大部分内容和例子都将使用NIO.2的新特性,因此需要JDK 7或更新版本。但是,在本章末尾简要介绍了JDK 7之前的代码。这对于使用JDK 7之前的环境进行工作以及维护旧代码是有帮助的。
请记住:
本章中的大部分例子都需要JDK 7或更新版本。
在过去,NIO的主要目的是进行基于通道的I/O,这到目前仍然是一个非常重要的应用。然而,可以为基于流的I/O以及执行文件系统操作使用NIO。因此,对NIO使用的讨论分为以下3个部分:
为基于通道的I/O使用NIO。
为基于流的I/O使用NIO。
为路径和文件系统使用NIO。
因为最常用的I/O设备是磁盘文件,所以本章剩余部分在示例中使用磁盘文件。因为所有文件通道操作都是基于字节的,所以我们将使用的缓存类型是ByteBuffer。
在为了通过NIO系统进行访问而打开文件之前,必须获取描述文件的Path对象。完成该工作的一种方式是调用Paths.get()工厂方法,在前面介绍过该方法。在示例中使用的get()方法如下所示:
回顾一下指定路径的两种方式。可以分块传递,第1部分使用pathname传递,后续部分通过parts可变参数指定。另外一种方式,可以使用pathname指定整个路径,而不使用parts,示例程序将使用这种方式。
- static Path get(String pathname, String ... parts)