10.Java IO 系统

第 10 章 Java IO 系统

“对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”

由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的。其中最大的挑战似乎是如何覆盖所有可能的因素。不仅有三种不同的种类的 IO 需要考虑(文件、控制台、网络连接),而且需要通过大量不同的方式与它们通信(顺序、随机访问、二进制、字符、按行、按字等等)。

Java 库的设计者通过创建大量类来攻克这个难题。事实上,Java 的 IO 系统采用了如此多的类,以致刚开始会产生不知从何处入手的感觉(具有讽刺意味的是,Java 的 IO 设计初衷实际要求避免过多的类)。从 Java 1.0 升级到 Java 1.1 后,IO 库的设计也发生了显著的变化。此时并非简单地用新库替换旧库,Sun 的设计人员对原来的库进行了大手笔的扩展,添加了大量新的内容。因此,我们有时不得不混合使用新库与旧库,产生令人无奈的复杂代码。

本章将帮助大家理解标准 Java 库内的各种 IO 类,并学习如何使用它们。本章的第一部分将介绍“旧”的 Java 1.0 IO 流库,因为现在有大量代码仍在使用那个库。本章剩下的部分将为大家引入 Java 1.1 IO 库的一些新特性。注意若用 Java 1.1 编译器来编译本章第一部分介绍的部分代码,可能会得到一条“不建议使用该特性”(Deprecated feature)警告消息。代码仍然能够使用;编译器只是建议我们换用本章后面要讲述的一些新特性。但我们这样做是有价值的,因为可以更清楚地认识老方法与新方法之间的一些差异,从而加深我们的理解(并可顺利阅读为 Java 1.0 写的代码)。