資源描述:
《Java面向?qū)ο蟪绦蛟O(shè)計 教學(xué)課件 張亦輝 馮華 胡潔 第6章 輸入.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第6章輸入/輸出和異常處理在實際的應(yīng)用開發(fā)中經(jīng)常會遇到數(shù)據(jù)輸入/輸出的需求,這樣的需求在Java中使用I/O流來實現(xiàn)。本章首先介紹Java中用于輸入/輸出的I/O流,然后介紹與輸入/輸出密切相關(guān)的序列化機(jī)制和文件管理,最后介紹Java中的異常處理,它用于保證代碼的容錯性。6.1I/O流一個好的程序語言,完善的輸入輸出功能是必不可少的。在Java中將不同來源和目標(biāo)的數(shù)據(jù)統(tǒng)一抽象為流,通過對流對象的操作來完成I/O功能。Java中的流很靈活,可以連接到各種不同的源或目標(biāo),如磁盤文件、鍵盤(輸入設(shè)備)、顯示器(輸出設(shè)備)、網(wǎng)絡(luò)等。6.1.1流的層次Java中所有的I/O都是通過流來
2、實現(xiàn)的,可以將流理解為連接到數(shù)據(jù)目標(biāo)或源的管道,可以通過連接到源的流從源當(dāng)中讀取數(shù)據(jù),或通過連接到目標(biāo)的流向目標(biāo)中寫入數(shù)據(jù)。根據(jù)流的方向可以將其分為兩類:輸入流和輸出流。用戶可以從輸入流中讀取信息,向輸出流中寫信息。根據(jù)流處理數(shù)據(jù)類型的不同也可以將其分為兩類:字節(jié)流與字符流。下面主要從類的層次來介紹I/O流。Java中I/O流是由java.io包來實現(xiàn)的,其中的類大致分為輸入和輸出兩大部分。在java.io包最頂層包含子類較多的兩個類是InputStream和OutputStream。圖分別表示java.io包中的輸入流類和輸出流類的層次。這兩個類均為抽象類,也就是說不能創(chuàng)建
3、它們的實例對象,必須創(chuàng)建子類之后才能建立對象。java.io包中的很多類都是從這兩個類繼承而來的,因此,這些子類有很多相同的方法。6.1.2輸入流和輸出流前面介紹過,Java的I/O類庫分成輸入和輸出兩大部分。所有InputStream和Reader的派生類都有一個繼承下來的,能讀取單個或byte數(shù)組的read()方法。同理,所有OutputStream和Writer的派生類都有一個能寫入單個或byte數(shù)組的write()方法。但通常情況下,這些方法不是直接應(yīng)用的,而是供其他類使用,而其他類會提供一些更實用的接口。Java的設(shè)計者們遵循這樣的原則:讓所有與輸入相關(guān)的類去繼承I
4、nputStream,所有與輸出相關(guān)的類繼承OutputStream。6.1.3字節(jié)流和字符流根據(jù)流處理數(shù)據(jù)類型的不同也可以將其分為兩類:字節(jié)流與字符流,下面列出了這兩種流的不同之處。字節(jié)流:字節(jié)流以字節(jié)為基本單位來處理數(shù)據(jù)的輸入/輸出,一般都用于對二進(jìn)制數(shù)據(jù)的讀寫,如聲音、圖像等。字符流:字符流以字符為基本單位來處理數(shù)據(jù)的輸入和輸出,一般都用于對文本類型數(shù)據(jù)的讀寫,如文本文件、網(wǎng)絡(luò)中發(fā)送的文本信息等。雖然文本數(shù)據(jù)也可以看作二進(jìn)制數(shù)據(jù),但一般采用字符流處理文本數(shù)據(jù)比采用字節(jié)流效率更高,也更方便。6.1.4隨機(jī)存取文件流前面介紹的都是順序訪問的流,在Java還有一種支持隨機(jī)訪問
5、的流RandomAccessFile。這個類的實例支持同時進(jìn)行的讀/寫操作。一個隨機(jī)存取文件好比存儲在文件系統(tǒng)中的一個大“數(shù)組”。該“數(shù)組”有一個文件指針,輸入操作從該指針?biāo)甘镜牡胤介_始讀取數(shù)據(jù),每讀一個字節(jié),指針后移一個字節(jié)。如果一個隨機(jī)存取文件以讀/寫方式創(chuàng)建,也可對其進(jìn)行輸出(寫)操作。輸出操作也從文件指針?biāo)傅牡胤綄懽止?jié),并將指針置于所寫字節(jié)之后。當(dāng)輸出操作超過了“數(shù)組”的末尾,將導(dǎo)致文件的擴(kuò)大。文件指針可用getFilePointer()方法讀取,用seek()方法設(shè)置。6.2I/O流的使用Java的流式輸入和輸出,是通過使用前面介紹的這些I/O流類來實現(xiàn)的。本節(jié)
6、將具體介紹如何使用這些流類,包括標(biāo)準(zhǔn)的I/O輸出、基本的I/O流、過濾流、文件的隨機(jī)讀寫和流的分割。6.2.1標(biāo)準(zhǔn)的I/O流下面首先介紹標(biāo)準(zhǔn)的I/O流的使用方法。在Java語言中,鍵盤用stdin表示,監(jiān)視器用stdout表示。它們均被封裝在System類的類變量in和out中,分別對應(yīng)于System.in和System.out。事實上,類變量in和out分別屬于類InputStream和PrintStream,只是由于InputStream和PrintStream不能用new()方法直接創(chuàng)建,所以才在System類中聲明為如下的3個類變量。publicstaticInput
7、StreaminpublicstaticPrintStreamoutpublicstaticPrintStreamerr6.2.2基本的I/O流基本的I/O流主要包括InputStream類、OutputStream類、PipedInputStream類和PipedOutputStream類以及SequenceInputStream類,下面分別加以介紹。1.InputStream類InputStream類是以字節(jié)為單位的輸入流。數(shù)據(jù)來源可以是鍵盤,也可以是諸如Internet這樣的網(wǎng)絡(luò)環(huán)境。這個類可作為