“對語言設計人員來說,創建好的輸入/輸出系統是一項特別困難的任務。”
由於存在大量不同的設計方案,所以該任務的困難性是很容易證明的。其中最大的挑戰似乎是如何覆蓋所有可能的因素。不僅有三種不同的種類的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寫的代碼)。