第15章Java輸入輸出流_第1頁
第15章Java輸入輸出流_第2頁
第15章Java輸入輸出流_第3頁
第15章Java輸入輸出流_第4頁
第15章Java輸入輸出流_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第1515章章 JavaJava輸入輸出流輸入輸出流Java提供了完善的輸入輸出功能,即提供了完善的輸入輸出功能,即I/O功能。用于處功能。用于處理鍵盤輸入、文件讀取、寫入以及網(wǎng)絡(luò)傳輸數(shù)據(jù)等事件。理鍵盤輸入、文件讀取、寫入以及網(wǎng)絡(luò)傳輸數(shù)據(jù)等事件。Java的輸入輸出流是非常復(fù)雜的,本章將會對的輸入輸出流是非常復(fù)雜的,本章將會對Java的文件系的文件系統(tǒng)、各類輸入輸出流以及對象序列化進(jìn)行介紹。通過本節(jié)的統(tǒng)、各類輸入輸出流以及對象序列化進(jìn)行介紹。通過本節(jié)的學(xué)習(xí)讀者會對學(xué)習(xí)讀者會對Java的輸入輸出流有清晰的認(rèn)識。的輸入輸出流有清晰的認(rèn)識。15.1 I/O15.1 I/O基礎(chǔ)基礎(chǔ)在正式介紹在正式介紹

2、Java輸入輸出流之前需要一些基本概念的輸入輸出流之前需要一些基本概念的介紹。這一節(jié)的主要內(nèi)容就是介紹介紹。這一節(jié)的主要內(nèi)容就是介紹Java中的中的I/O基礎(chǔ)。主要基礎(chǔ)。主要包括流的概念,包括流的概念,Java中流的分類以及中流的分類以及Java的的File類,通過類,通過File類可以方便的進(jìn)行文件管理。學(xué)習(xí)完本節(jié)內(nèi)容后就可以類可以方便的進(jìn)行文件管理。學(xué)習(xí)完本節(jié)內(nèi)容后就可以對對Java的輸入輸出流機(jī)制有一個大體的了解了。的輸入輸出流機(jī)制有一個大體的了解了。 15.1.1 15.1.1 流的概念流的概念在在Java中是通過流來實(shí)現(xiàn)輸入輸出的,流是對各類信中是通過流來實(shí)現(xiàn)輸入輸出的,流是對各類信

3、息的抽象概念。可以把流看作是息的抽象概念??梢园蚜骺醋魇荍ava輸入輸出系統(tǒng)與目標(biāo)之輸入輸出系統(tǒng)與目標(biāo)之間的管道。間的管道。Java可以通過流從目標(biāo)讀取數(shù)據(jù),或者通過流把數(shù)據(jù)可以通過流從目標(biāo)讀取數(shù)據(jù),或者通過流把數(shù)據(jù)寫入目標(biāo)。寫入目標(biāo)。Java的的I/O流可以連接多種目標(biāo),包括鍵盤等輸流可以連接多種目標(biāo),包括鍵盤等輸入設(shè)備、顯示器等輸出設(shè)備以及磁盤和網(wǎng)絡(luò)。入設(shè)備、顯示器等輸出設(shè)備以及磁盤和網(wǎng)絡(luò)。Java中的輸入流是指讀取數(shù)據(jù)的來源,可以從一個輸中的輸入流是指讀取數(shù)據(jù)的來源,可以從一個輸入流中讀取數(shù)據(jù)。輸出流是可以把數(shù)據(jù)寫入的流,通過輸出入流中讀取數(shù)據(jù)。輸出流是可以把數(shù)據(jù)寫入的流,通過輸出流可以

4、把信息輸出到顯示器、硬盤以及網(wǎng)絡(luò)。流可以把信息輸出到顯示器、硬盤以及網(wǎng)絡(luò)。15.1.2 15.1.2 字節(jié)流和字符流字節(jié)流和字符流字節(jié)流:字節(jié)流主要用于以字節(jié)為基本單位的輸入輸出。主字節(jié)流:字節(jié)流主要用于以字節(jié)為基本單位的輸入輸出。主要處理字節(jié)或者二進(jìn)制數(shù)據(jù)的各種輸入輸出。一般用于處理圖像、要處理字節(jié)或者二進(jìn)制數(shù)據(jù)的各種輸入輸出。一般用于處理圖像、聲音文件。聲音文件。字符流:字符流是以字符為輸入輸出處理的基本單位。主要字符流:字符流是以字符為輸入輸出處理的基本單位。主要用于處理字符或是文本類型的輸入輸出流。一般用作處理文本文件用于處理字符或是文本類型的輸入輸出流。一般用作處理文本文件讀取存儲以

5、及與網(wǎng)絡(luò)的文本信息的交互。讀取存儲以及與網(wǎng)絡(luò)的文本信息的交互。對應(yīng)與對應(yīng)與Java中的字節(jié)流的輸入輸出類為中的字節(jié)流的輸入輸出類為InputStream類和類和OutputStream類。下面對該類進(jìn)行詳細(xì)的分析。類。下面對該類進(jìn)行詳細(xì)的分析。1. InputStream類類2. OutputStream類類3. Reader類類4Writer類類15.1.3 15.1.3 文件管理文件管理本章主要對本章主要對Java的的I/O進(jìn)行介紹,通常情況下,進(jìn)行介紹,通常情況下,I/O都是都是和文件相關(guān)的。本小節(jié)主要對和文件相關(guān)的。本小節(jié)主要對Java中中File類的使用,通過它類的使用,通過它可以進(jìn)

6、行文件目錄的獲取以及對目錄和文件管理??梢赃M(jìn)行文件目錄的獲取以及對目錄和文件管理。15.2 15.2 字節(jié)流相關(guān)類字節(jié)流相關(guān)類本節(jié)主要對本節(jié)主要對Java中相關(guān)的各種字節(jié)流進(jìn)行介紹,通過中相關(guān)的各種字節(jié)流進(jìn)行介紹,通過一些簡單的例子進(jìn)行簡單的展示。主要的字節(jié)流類有一些簡單的例子進(jìn)行簡單的展示。主要的字節(jié)流類有FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream、過濾字、過濾字節(jié)流等類。節(jié)流等類。15.2.1 15.2.1 文件輸入流文件輸入流FileInputStreamFileInputStre

7、amFileInputStream創(chuàng)建一個創(chuàng)建一個InputStream,從文件系統(tǒng)的某,從文件系統(tǒng)的某個文件中獲取輸入字節(jié)。它通常有兩種構(gòu)造方式:個文件中獲取輸入字節(jié)。它通常有兩種構(gòu)造方式:FileInputStream(File file)、FileInputStream(String name)。第一種是打開一個實(shí)際的文件來創(chuàng)建一個第一種是打開一個實(shí)際的文件來創(chuàng)建一個FileInputStream。該文件通過文件系統(tǒng)中。該文件通過文件系統(tǒng)中File對象對象file來指定。來指定。另一方法是通過另一方法是通過name來指定文件的路徑。這兩種方法都會拋來指定文件的路徑。這兩種方法都會拋出異常

8、,如果指定的文件或路徑不存在或者是一個目錄的話,出異常,如果指定的文件或路徑不存在或者是一個目錄的話,創(chuàng)建失敗。會拋出創(chuàng)建失敗。會拋出FileNotFoundException異常。異常。15.2.2 15.2.2 文件輸出流文件輸出流FileOutputStreamFileOutputStreamFileOutputStream創(chuàng)建一個可以將字節(jié)寫入文件的輸出創(chuàng)建一個可以將字節(jié)寫入文件的輸出流。它的常用構(gòu)造函數(shù)有以下兩種:流。它的常用構(gòu)造函數(shù)有以下兩種:FileOutputStream(File file)、FileOutputStream(String name)。15.2.3 15.2.

9、3 字節(jié)數(shù)組輸入流字節(jié)數(shù)組輸入流ByteArrayInputStreamByteArrayInputStreamByteArrayInputStream是把字節(jié)數(shù)組當(dāng)作輸入源的輸入流,是把字節(jié)數(shù)組當(dāng)作輸入源的輸入流,這種輸入流有兩種構(gòu)造函數(shù)。下面是這兩種形式:這種輸入流有兩種構(gòu)造函數(shù)。下面是這兩種形式:ByteArrayInputStream(byte buf)、ByteArrayInputStream(byte buf,int start,int num)。第一個構(gòu)造函數(shù)是創(chuàng)建一個第一個構(gòu)造函數(shù)是創(chuàng)建一個ByteArrayInputStream對象,使對象,使用用buf作為其緩沖區(qū)數(shù)組。第二

10、個構(gòu)造函數(shù)是創(chuàng)建一個作為其緩沖區(qū)數(shù)組。第二個構(gòu)造函數(shù)是創(chuàng)建一個ByteArrayInputStream對象,以字節(jié)數(shù)組對象,以字節(jié)數(shù)組buf為緩沖數(shù)組,從為緩沖數(shù)組,從start位置開始,長度為位置開始,長度為num的數(shù)組子集。的數(shù)組子集。ByteArrayInputStream實(shí)現(xiàn)了實(shí)現(xiàn)了mark()和和reset()方法。方法。mark()方法用于標(biāo)記流,方法用于標(biāo)記流,reset()方法用于重置流。但是,如果方法用于重置流。但是,如果makr()不被不被調(diào)用的話,調(diào)用的話,reset()就返回到該流的起始位置。就返回到該流的起始位置。15.2.4 15.2.4 字節(jié)輸出字節(jié)流字節(jié)輸出字節(jié)

11、流ByteArrayOutputStreamByteArrayOutputStreamByteArrayOutputStream是字節(jié)數(shù)組輸出流,它把字節(jié)是字節(jié)數(shù)組輸出流,它把字節(jié)數(shù)組作為寫入的目的地。該流的構(gòu)造函數(shù)有下邊兩種形式:數(shù)組作為寫入的目的地。該流的構(gòu)造函數(shù)有下邊兩種形式:ByteArrayOutputStream()、ByteArrayOutputStream(int num)。第一種形式創(chuàng)建一個第一種形式創(chuàng)建一個32字節(jié)的緩沖區(qū),第二種形式創(chuàng)建字節(jié)的緩沖區(qū),第二種形式創(chuàng)建一個大小為一個大小為num字節(jié)的緩沖區(qū)。緩沖區(qū)被保存在字節(jié)的緩沖區(qū)。緩沖區(qū)被保存在buf數(shù)組中,數(shù)組中,buf

12、的長度被保存在的長度被保存在count中,中,buf和和count都是受保護(hù)的。都是受保護(hù)的。15.2.5 15.2.5 過濾字節(jié)流過濾字節(jié)流另外有常用的過濾字節(jié)流。包括過濾輸入流另外有常用的過濾字節(jié)流。包括過濾輸入流FilterInputStream和過濾輸出流和過濾輸出流FilterOutputStream的主要的主要作用是在輸入輸出數(shù)據(jù)的同時對數(shù)據(jù)進(jìn)行指定格式的轉(zhuǎn)換。作用是在輸入輸出數(shù)據(jù)的同時對數(shù)據(jù)進(jìn)行指定格式的轉(zhuǎn)換。該流一般通過通用流的方法來訪問的,即過濾類的超該流一般通過通用流的方法來訪問的,即過濾類的超類。典型的擴(kuò)展是緩沖、字符轉(zhuǎn)換和原始數(shù)據(jù)轉(zhuǎn)換。它們的類。典型的擴(kuò)展是緩沖、字符轉(zhuǎn)

13、換和原始數(shù)據(jù)轉(zhuǎn)換。它們的構(gòu)造函數(shù)如下:構(gòu)造函數(shù)如下:FilterInputStream(InputStream is)、FilterOutputStream (OutputStream os)。這些類提供的方法。這些類提供的方法與與InputStream和和OutputStream中的方法一樣。中的方法一樣。15.2.6 15.2.6 緩沖輸入流緩沖輸入流BufferedInputStreamBufferedInputStream對于面向字節(jié)的流來說,緩沖流是一個擴(kuò)展的過濾流對于面向字節(jié)的流來說,緩沖流是一個擴(kuò)展的過濾流類。它通過把內(nèi)存緩沖區(qū)連接到輸入輸出流來擴(kuò)展的。這個類。它通過把內(nèi)存緩沖區(qū)

14、連接到輸入輸出流來擴(kuò)展的。這個緩沖區(qū)中,可以對多個字節(jié)同時進(jìn)行輸入輸入輸出操作,可緩沖區(qū)中,可以對多個字節(jié)同時進(jìn)行輸入輸入輸出操作,可以提高程序的性能。通過緩沖區(qū),可以實(shí)現(xiàn)流的跳過、標(biāo)記以提高程序的性能。通過緩沖區(qū),可以實(shí)現(xiàn)流的跳過、標(biāo)記和重置操作。和重置操作。緩沖字節(jié)流有緩沖字節(jié)流有BufferedInputStream和和BufferedOutputStream。另外,。另外,PushbackInputStream也實(shí)也實(shí)現(xiàn)了緩沖流?,F(xiàn)了緩沖流。15.2.7 15.2.7 緩沖輸出流緩沖輸出流BufferedOutputStreamBufferedOutputStream在在Buffere

15、dOutputStream中除了有中除了有OutputStream中提供的方中提供的方法,增加了一個法,增加了一個flush()方法。這樣可以確保數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)方法。這樣可以確保數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)被寫到實(shí)際的輸出設(shè)備中。在被寫到實(shí)際的輸出設(shè)備中。在BufferedOutputStream中是通過減中是通過減少系統(tǒng)寫數(shù)據(jù)時間來提高性能的,可以通過少系統(tǒng)寫數(shù)據(jù)時間來提高性能的,可以通過flush方法寫出緩沖區(qū)方法寫出緩沖區(qū)中的數(shù)據(jù)。中的數(shù)據(jù)。BufferedOutputStream的構(gòu)造函數(shù)有兩個:的構(gòu)造函數(shù)有兩個:BufferedOutputStream(OutputStream os)Bu

16、fferedOutputStream(OutputStream os,int bufsize)第一個構(gòu)造函數(shù)產(chǎn)生一個默認(rèn)長度為第一個構(gòu)造函數(shù)產(chǎn)生一個默認(rèn)長度為512自己的緩沖流。第自己的緩沖流。第二種形式通過二種形式通過bufsize指定緩沖區(qū)的的大小。指定緩沖區(qū)的的大小。15.2.8 15.2.8 回退輸出流回退輸出流PushbackInputStreamPushbackInputStream通過緩沖區(qū)可以實(shí)現(xiàn)的另一個功能是回退?;赝耸菑耐ㄟ^緩沖區(qū)可以實(shí)現(xiàn)的另一個功能是回退?;赝耸菑妮斎肓髦凶x取一個字節(jié)然后把它返回到流中,輸入流中讀取一個字節(jié)然后把它返回到流中,PushbackInputSt

17、ream類實(shí)現(xiàn)了這個功能。類實(shí)現(xiàn)了這個功能。PushbackInputStream類的構(gòu)造函數(shù)有兩種形式:類的構(gòu)造函數(shù)有兩種形式:PushbackInputStream(InputStream is)、PushbackInputStream(InputSteam is,int num)。第一種形式。第一種形式創(chuàng)建一個流對象,它支持返回一個字節(jié)到輸入流。第二種形創(chuàng)建一個流對象,它支持返回一個字節(jié)到輸入流。第二種形式創(chuàng)建了具體式創(chuàng)建了具體num長度的緩沖區(qū)的回退緩沖流。長度的緩沖區(qū)的回退緩沖流。15.2.9 15.2.9 數(shù)據(jù)流數(shù)據(jù)流DataOutputStreamDataOutputStream

18、和和DataInputStreamDataInputStreamDataOutputStream和和DataInputStream是兩個非常有用是兩個非常有用的類。它們分別繼承自的類。它們分別繼承自FilterOutputStream和和FilterInputStream。這兩個流可以提供流按照與機(jī)器無關(guān)的。這兩個流可以提供流按照與機(jī)器無關(guān)的讀寫能力。通過該流讀寫的數(shù)據(jù)與所在的機(jī)器無關(guān),比較適讀寫能力。通過該流讀寫的數(shù)據(jù)與所在的機(jī)器無關(guān),比較適合在網(wǎng)絡(luò)上使用該流。它們的構(gòu)造函數(shù)如下:合在網(wǎng)絡(luò)上使用該流。它們的構(gòu)造函數(shù)如下:DataOutputStream(OutputStream os)Dat

19、aInputStream(InputStream is)該類的使用這里不再舉例說明,讀者可以自行查閱相該類的使用這里不再舉例說明,讀者可以自行查閱相關(guān)的關(guān)的API來熟悉它的使用。來熟悉它的使用。15.2.10 15.2.10 隨機(jī)訪問文件類隨機(jī)訪問文件類RandomAccessFileRandomAccessFile類類RandomAccessFile提供了一個能隨機(jī)存取的文件類。該類不是提供了一個能隨機(jī)存取的文件類。該類不是從從InputStream或是或是OutputStream中擴(kuò)展的。但是它實(shí)現(xiàn)了定義輸入中擴(kuò)展的。但是它實(shí)現(xiàn)了定義輸入輸出方法的輸出方法的DateInput和和DateO

20、utput接口。它的構(gòu)造函數(shù)如下:接口。它的構(gòu)造函數(shù)如下:RandomAccessFile(File file,String mode)RandomAccessFile(String name,String mode)第一種形式中第一種形式中file指定了要打開的文件,第二個參數(shù)指定打開的指定了要打開的文件,第二個參數(shù)指定打開的模式。如果值為模式。如果值為“r”,以只讀形式打開文件。如果為,以只讀形式打開文件。如果為“rw”打開文件打開文件可以讀取和寫入。如果是可以讀取和寫入。如果是“rws”打開文件可以讀取和寫入,并要求打開文件可以讀取和寫入,并要求每個文件內(nèi)容或元數(shù)據(jù)的更新都同步到基礎(chǔ)存儲

21、設(shè)備。如果是每個文件內(nèi)容或元數(shù)據(jù)的更新都同步到基礎(chǔ)存儲設(shè)備。如果是“rwd”打開可以讀取和寫入還要求對文件內(nèi)容的每個更新都同步寫打開可以讀取和寫入還要求對文件內(nèi)容的每個更新都同步寫入到基礎(chǔ)存儲設(shè)備。第二種形式的入到基礎(chǔ)存儲設(shè)備。第二種形式的name指定文件的名字,第二個參指定文件的名字,第二個參數(shù)跟第一種形式相同。數(shù)跟第一種形式相同。15.3 15.3 字符流相關(guān)類字符流相關(guān)類前一節(jié)介紹了前一節(jié)介紹了Java中具體的一些字節(jié)流,這一節(jié)將介中具體的一些字節(jié)流,這一節(jié)將介紹紹Java中的字符流類。字節(jié)流不能直接處理中的字符流類。字節(jié)流不能直接處理Unicode碼。碼。Java要想實(shí)現(xiàn)要想實(shí)現(xiàn)“一次

22、編寫,各處運(yùn)行一次編寫,各處運(yùn)行”就必須提供的對就必須提供的對Unicode碼的支持,字符流就是在這種情況下誕生的。本節(jié)碼的支持,字符流就是在這種情況下誕生的。本節(jié)將要介紹的幾個字符流類,它們都擴(kuò)展子將要介紹的幾個字符流類,它們都擴(kuò)展子Reader類和類和Writer類,關(guān)于這兩個類前面已經(jīng)進(jìn)行了介紹。請讀者回顧下前面類,關(guān)于這兩個類前面已經(jīng)進(jìn)行了介紹。請讀者回顧下前面的內(nèi)容。的內(nèi)容。15.3.1 15.3.1 字符輸入流字符輸入流InputStreamReaderInputStreamReaderInputStreamReader是字節(jié)流通向字符流的橋梁。它使是字節(jié)流通向字符流的橋梁。它使用

23、指定的字符集讀取字節(jié)并將其解碼為字符。它使用的字符用指定的字符集讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,否則可能接受平臺默認(rèn)的字集可以由名稱指定或顯式給定,否則可能接受平臺默認(rèn)的字符集。它的構(gòu)造函數(shù)有下面幾種形式:符集。它的構(gòu)造函數(shù)有下面幾種形式:InputStreamReader(InputStream is)InputStreamReader(InputStream is,Charset cs)InputStreamReader(InputStream is,CharsetDecoder cs)InputStreamReader(InputStream is,St

24、ring charSetName)15.3.2 15.3.2 字符輸出流字符輸出流OutputStreamWriterOutputStreamWriterOutputStreamWriter是字符流通向字節(jié)流的橋梁。使是字符流通向字節(jié)流的橋梁。使用指定的字符集將要向其寫入的字符編碼為字節(jié)。它使用的用指定的字符集將要向其寫入的字符編碼為字節(jié)。它使用的字符集可以由名稱指定或顯式給定,否則可能接受平臺默認(rèn)字符集可以由名稱指定或顯式給定,否則可能接受平臺默認(rèn)的字符集。的字符集。每次調(diào)用每次調(diào)用write()方法的時候?qū)σ獙懭氲淖址{(diào)用編碼器方法的時候?qū)σ獙懭氲淖址{(diào)用編碼器進(jìn)行轉(zhuǎn)換。在把它們寫入基本輸

25、出流之前,會把它們先放到進(jìn)行轉(zhuǎn)換。在把它們寫入基本輸出流之前,會把它們先放到緩沖區(qū)存放。緩沖區(qū)存放。15.3.3 15.3.3 讀文件類讀文件類FileReaderFileReaderFileReader是一個可以方便的讀取文件的類,它的直接父類是一個可以方便的讀取文件的類,它的直接父類是是InputStreamReader。常用構(gòu)造函數(shù)如下:。常用構(gòu)造函數(shù)如下:FileReader(String filePath)和和FileReader(File file)。第一種形式是通過路徑來構(gòu)建一。第一種形式是通過路徑來構(gòu)建一個個FileReader對象。第二種形式是通過對象。第二種形式是通過Fil

26、e對象來創(chuàng)建一個對象來創(chuàng)建一個FileReader對象。這兩種形式創(chuàng)建出的對象都是使用系統(tǒng)默認(rèn)的字對象。這兩種形式創(chuàng)建出的對象都是使用系統(tǒng)默認(rèn)的字符編碼。符編碼。15.3.4 15.3.4 寫文件類寫文件類FileWriterFileWriterFileWriter用來向文件中寫入字符的便捷類。此類的構(gòu)用來向文件中寫入字符的便捷類。此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是可接受造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是可接受的。要自己指定這些值,可以先在的。要自己指定這些值,可以先在FileOutputStream上構(gòu)造上構(gòu)造一個一個OutputStreamWriter。該類

27、常用的構(gòu)造函數(shù)有下面幾種。該類常用的構(gòu)造函數(shù)有下面幾種形式:形式:FileWriter(File file)FileWriter(File , boolean append)FileWriter(String fileName)FileWriter(String filename,boolean append)15.3.5 15.3.5 讀取緩沖類讀取緩沖類BufferedReaderBufferedReaderBufferedReader可以從輸入流中讀取文本。它通過緩沖可以從輸入流中讀取文本。它通過緩沖去來改進(jìn)字符、數(shù)組和行的讀取效率。可以指定緩沖區(qū)的大去來改進(jìn)字符、數(shù)組和行的讀取效率???/p>

28、以指定緩沖區(qū)的大小或者使用默認(rèn)的緩沖區(qū)大小。它的構(gòu)造函數(shù)如下:小或者使用默認(rèn)的緩沖區(qū)大小。它的構(gòu)造函數(shù)如下:BufferedReader(Reader in)和和BufferedReader(Reader in,in size)。第一種形式創(chuàng)建一個默認(rèn)大小的緩沖字符流,第二種。第一種形式創(chuàng)建一個默認(rèn)大小的緩沖字符流,第二種形式指定緩沖區(qū)的大小。形式指定緩沖區(qū)的大小。BufferedReader提供了緩沖區(qū)實(shí)現(xiàn)回退的方法,即提供了緩沖區(qū)實(shí)現(xiàn)回退的方法,即mark()和和reset()方法。這樣的話方法。這樣的話BufferedReader.markSuppored()的返回值為的返回值為true

29、。下面的程。下面的程序是把一個文件字符流封裝到緩沖字符流內(nèi)讀取文件,這樣序是把一個文件字符流封裝到緩沖字符流內(nèi)讀取文件,這樣能提高讀取的效率。能提高讀取的效率。15.3.6 15.3.6 寫入緩沖類寫入緩沖類BufferedWriterBufferedWriterBufferedWriter可以將文本寫入字符輸出流,緩沖各個可以將文本寫入字符輸出流,緩沖各個字符。從而可以實(shí)現(xiàn)單個字符、數(shù)組和字符串的高效寫入。字符。從而可以實(shí)現(xiàn)單個字符、數(shù)組和字符串的高效寫入。它提供了一個方法它提供了一個方法flush()可以確保緩沖區(qū)寫入到可以確保緩沖區(qū)寫入到Writer。它。它的構(gòu)造函數(shù)有下面的兩種形式:的

30、構(gòu)造函數(shù)有下面的兩種形式:BufferedWriter (Writer outputStream)和和BufferedWriter (Writer outputStream,int bufSize)。第一種形式創(chuàng)建一個具有默認(rèn)大小緩沖區(qū)的緩沖流。第一種形式創(chuàng)建一個具有默認(rèn)大小緩沖區(qū)的緩沖流。在第二種形式中,使用在第二種形式中,使用bufSize指定緩沖去的大小。指定緩沖去的大小。15.4 15.4 對象序列化對象序列化如果可以把對象保存或者能把對象直接在網(wǎng)絡(luò)中傳輸如果可以把對象保存或者能把對象直接在網(wǎng)絡(luò)中傳輸?shù)脑?,無疑可以提供強(qiáng)大的功能。的話,無疑可以提供強(qiáng)大的功能。Java提供了這種功能,即

31、提供了這種功能,即對象序列化。本節(jié)會對如何實(shí)現(xiàn)對象序列化,它的基本使用對象序列化。本節(jié)會對如何實(shí)現(xiàn)對象序列化,它的基本使用以及一些細(xì)節(jié)知識進(jìn)行講解。以及一些細(xì)節(jié)知識進(jìn)行講解。15.4.1 Serializable15.4.1 Serializable接口接口要想把對象序列化,對象所屬的類必須實(shí)現(xiàn)要想把對象序列化,對象所屬的類必須實(shí)現(xiàn)Serializable接口。未實(shí)現(xiàn)此接口的類不能實(shí)現(xiàn)任何狀態(tài)序列接口。未實(shí)現(xiàn)此接口的類不能實(shí)現(xiàn)任何狀態(tài)序列化。可序列化的所有類型的子類型都是可序列化的。該接口化。可序列化的所有類型的子類型都是可序列化的。該接口沒有任何方法和字段,只是用于標(biāo)示類是可序列化的作用。沒有任何方法和字段,只是用于標(biāo)示類是可序列化的作用。15.4.2 15.4.2 對象輸入輸出流對象輸入輸出流要將對象寫入到流中需要使用對象輸入輸出流,即要將對象寫入到流中需要使用對象輸入輸出流,即ObjectOutputStream類和類和ObjectInputStream。ObjectOutputS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論