《輸入輸出流》PPT課件.ppt
《《輸入輸出流》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《輸入輸出流》PPT課件.ppt(42頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第7章輸入/輸出流,主講教師:丁天翔,本章知識(shí)點(diǎn),流的概念I(lǐng)nputStream和OutputStream的繼承結(jié)構(gòu)Reader和Writer的繼承結(jié)構(gòu)原始流處理器和鏈接流(裝飾流)處理器常用流的使用文件類,流(Stream)的概念,Java語(yǔ)言采用流的機(jī)制來(lái)實(shí)現(xiàn)輸入/輸出。所謂流,就是數(shù)據(jù)的有序排列,而流可以是從某個(gè)源(稱為流源,SourceofStream)出來(lái),到某個(gè)目的地(稱為流匯,SinkofStream)去的。根據(jù)流的方向可以將流分成輸入流和輸出流。一個(gè)程序總是從輸入流讀取數(shù)據(jù),而向輸出流寫(xiě)出數(shù)據(jù)Java中負(fù)責(zé)I/O的類(稱為流類)統(tǒng)一存放在java.io包中。該包又叫做I/O庫(kù),流的處理過(guò)程(輸入),用來(lái)處理流的流類又稱為流處理器例如,一個(gè)java程序可以使用FileInputStream類直接從一個(gè)文件中讀取數(shù)據(jù),如下圖所示:,像FileInputStream這樣的流類叫做流處理器。一個(gè)流處理器就像一個(gè)流的管道一樣,從一個(gè)流源吸入某種類型的數(shù)據(jù),并輸出某種類型的數(shù)據(jù)。,類似地,也可以用FileOutputStream類直接向一個(gè)文件中寫(xiě)出數(shù)據(jù),如下圖所示:,在實(shí)際應(yīng)用當(dāng)中,這種簡(jiǎn)單的機(jī)制并沒(méi)有太大的用處。因?yàn)槌绦蛐枰獙?xiě)出的往往是非常結(jié)構(gòu)化的信息,比如數(shù)值、文字、源代碼等。這樣一來(lái),數(shù)據(jù)的轉(zhuǎn)換工作將十分復(fù)雜。,流的處理過(guò)程(輸出),流的處理過(guò)程(鏈接機(jī)制),Java的I/O庫(kù)提供了一個(gè)稱作鏈接(Chaining)的機(jī)制,可以將一個(gè)流處理器與另一個(gè)流處理器首尾相接,以其中之一的輸出為輸入,形成一個(gè)流管道的鏈接例如:DataInputStream流處理器可以把FileInputStream流對(duì)象的輸出當(dāng)作輸入,將byte類型的數(shù)據(jù)轉(zhuǎn)換成java的基本數(shù)據(jù)類型和String類型的數(shù)據(jù),如下圖所示:,節(jié)點(diǎn)流(原始流處理器),過(guò)濾流(鏈接流處理器),類似地,向一個(gè)文件寫(xiě)入byte類型的數(shù)據(jù)不是一個(gè)簡(jiǎn)單的過(guò)程:一個(gè)程序需要向一個(gè)文件里面寫(xiě)入的數(shù)據(jù)往往是結(jié)構(gòu)化的,而不是byte類型的,因此在利用FileOutputStream寫(xiě)的時(shí)候必須首先經(jīng)過(guò)轉(zhuǎn)換。DataOutputStream流處理器提供了直接接收基本數(shù)據(jù)類型和String類型的方法,而這個(gè)流處理器的輸出數(shù)據(jù)則是byte類型。這樣一來(lái),可以將DataOutputStream和FileOutputStream鏈接起來(lái),達(dá)到直接將結(jié)構(gòu)化的數(shù)據(jù)寫(xiě)入到文件中的目的。,int類型的數(shù)據(jù)float類型的數(shù)據(jù)String類型的數(shù)據(jù),流的處理過(guò)程(鏈接機(jī)制),JavaI/O庫(kù),流處理器所處理的流必定都有流源(匯),流源(匯)分成兩大類:數(shù)組、String、File等,叫原始流源。用于鏈接流類的流源,叫鏈接流源。Java語(yǔ)言的I/O庫(kù)是對(duì)各種常見(jiàn)的流源、流匯、以及處理過(guò)程的抽象化,Java語(yǔ)言的I/O庫(kù)是由一些基本的原始流處理器和圍繞它們的鏈接流處理器所組成的,按處理數(shù)據(jù)的單位劃分,Java支持兩種基本的流類型:字符流和字節(jié)流,JavaI/O庫(kù)的設(shè)計(jì)原則,兩個(gè)對(duì)稱性:輸入-輸出對(duì)稱:InputStream和OutputStream各自占據(jù)byte流的輸入與輸出的兩個(gè)平行的類等級(jí)結(jié)構(gòu)的根部;而Reader和Writer各自占據(jù)char流的輸入與輸出的兩個(gè)平行的類等級(jí)結(jié)構(gòu)的根部byte-char對(duì)稱:InputStream與Reader的子類分別負(fù)責(zé)byte和char流的輸入;OutputStream和Writer的子類分別負(fù)責(zé)byte和char流的輸出,輸入字節(jié)流InputStream,InputStream有7個(gè)直接子類,有4個(gè)屬于FilterInputStream的子類注:圖中深色的類是節(jié)點(diǎn)流處理器,其他是過(guò)濾流處理器。,原始流處理器:接收一個(gè)byte數(shù)組對(duì)象、String對(duì)象、File對(duì)象等原始流源對(duì)象,并生成一個(gè)InputStream類型的流對(duì)象。共有4個(gè):ByteArrayInputStream:接收一個(gè)byte數(shù)組作為流源。FileInputStream:建立一個(gè)與文件有關(guān)的輸入流,接收一個(gè)File對(duì)象作為流源。PipedInputStream:與PipedOutputStream配合使用,接收一個(gè)PipedOutputStream對(duì)象作為流源,可實(shí)現(xiàn)程序間或線程間通訊。StringBufferInputStream:(已過(guò)時(shí))此類未能正確地將字符轉(zhuǎn)換為字節(jié)。從JDK1.1開(kāi)始,從字符串創(chuàng)建流的首選方法是通過(guò)StringReader類進(jìn)行創(chuàng)建。,原始流處理器,鏈接流處理器:就是可以接收另一個(gè)流對(duì)象作為流源,并對(duì)之進(jìn)行功能擴(kuò)展的流類InputStream類型的鏈接流處理器包括以下7個(gè),都接收另一個(gè)InputStream對(duì)象作為流源。FilterInputStream:過(guò)濾輸入流,它將另一個(gè)輸入流作為流源。它有4個(gè)子類:BufferedInputStream:用來(lái)從硬盤(pán)將數(shù)據(jù)讀入到一個(gè)內(nèi)存緩沖區(qū)中,并從該緩沖區(qū)提供數(shù)據(jù)。DataInputStream:提供基于多字節(jié)的讀取方法,可以讀取基本數(shù)據(jù)類型的數(shù)據(jù)。LineNumberInputStream:提供帶有行計(jì)數(shù)功能的過(guò)濾輸入流。PushbackInputStream:提供特殊功能,可以將已經(jīng)讀取的字節(jié)“推回”到輸入流中。,鏈接流處理器(裝飾流處理器),讀方法intread();//從字節(jié)流對(duì)象中讀入一個(gè)字節(jié)作為返回值,返回值為-1時(shí),表示讀到流的結(jié)尾。intread(byte[]b);//將讀入的數(shù)據(jù)放在一個(gè)字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。intread(byte[]b,intoff,intlen);//將讀入的數(shù)據(jù)放在一個(gè)字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。兩個(gè)參數(shù)是讀入數(shù)據(jù)后存放在b中的位置。流的關(guān)閉方法voidclose();//用于關(guān)閉流。其他方法intavailable();//返回輸入流中還有多少可讀字節(jié)。intskip(longn);//跳過(guò)流中指定字節(jié)數(shù)量的數(shù)據(jù)。,流處理器的基本方法,輸出字節(jié)流OutputStream,OutputStream有5個(gè)直接子類,有3個(gè)屬于FilterOutputStream的子類,原始流處理器ByteArrayOutputStream:輸出流的匯集是一個(gè)byte數(shù)組FileOutputStream:輸出流的匯集是一個(gè)文件對(duì)象PipedOutputStream:用于向一個(gè)數(shù)據(jù)管道輸出數(shù)據(jù),原始輸出流處理器,鏈接流處理器:FilterOutputStream:過(guò)濾輸出流,它將另一個(gè)輸出流作為流匯。其子類有:BufferedOutputStream:向一個(gè)內(nèi)存緩沖區(qū)中寫(xiě)出數(shù)據(jù),并將此中的數(shù)據(jù)輸出到硬盤(pán)中DataOutputStream:可以寫(xiě)出基本數(shù)據(jù)類型的數(shù)據(jù)PrintStream:用于產(chǎn)生格式化輸出ObjectOutputStream:將基本數(shù)據(jù)類型和對(duì)象串行化,鏈接輸出流處理器,讀方法voidwrite(intb);//將指定的字節(jié)寫(xiě)入此輸出流。write的常規(guī)協(xié)定是:向輸出流寫(xiě)入一個(gè)字節(jié)。要寫(xiě)入的字節(jié)是參數(shù)b的八個(gè)低位。b的24個(gè)高位將被忽略。OutputStream的子類必須提供此方法的實(shí)現(xiàn)。voidwrite(byte[]b);//向輸出流中寫(xiě)一個(gè)字節(jié)數(shù)組。Voidwrite(byte[]b,intoff,intlen);//將讀入的數(shù)據(jù)放在一個(gè)字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。兩個(gè)參數(shù)是讀入數(shù)據(jù)后存放在b中的位置。流的關(guān)閉方法voidclose();//當(dāng)完成輸入流的寫(xiě)操作后關(guān)閉流。其他方法Voidflush();//強(qiáng)制將緩存的輸出數(shù)據(jù)寫(xiě)出到流匯。,流處理器的基本方法,如果需要對(duì)數(shù)據(jù)做真正的格式化,以便輸出到像控制臺(tái)顯示那樣,就要用PrintStream。PrintStream可以對(duì)基本數(shù)據(jù)類型和String對(duì)象組成的數(shù)據(jù)進(jìn)行格式化,以形成可閱讀的格式。System.out就是一個(gè)靜態(tài)的PrintStream對(duì)象。PrintStream對(duì)象最重要的兩個(gè)方法是print()和println()BufferedOutputStream:對(duì)一個(gè)輸出流進(jìn)行裝飾,使得流的寫(xiě)出操作使用緩沖操作,提高程序效率。在涉及到物理流的地方,比如控制臺(tái)I/O、文件I/O等,都應(yīng)當(dāng)使用這個(gè)裝飾流處理器,兩點(diǎn)說(shuō)明,示例程序,從字節(jié)數(shù)組中讀取數(shù)據(jù),并在屏幕上顯示讀取的內(nèi)容,同時(shí)將該內(nèi)容寫(xiě)入指定的文件IODemo.txt中。讀入字符串中的字符將奇數(shù)位的字母轉(zhuǎn)換為大寫(xiě)并輸出,java.lang.SystempublicfinalclassSystemextendsObject{staticPrintStreamerr;//標(biāo)準(zhǔn)錯(cuò)誤流(輸出)staticInputStreamin;//標(biāo)準(zhǔn)輸入(鍵盤(pán)輸入流)staticPrintStreamout;//標(biāo)準(zhǔn)輸出流(顯示器輸出流)},Java的標(biāo)準(zhǔn)的數(shù)據(jù)流,注意:(1)System類不能創(chuàng)建對(duì)象,只能直接使用它的三個(gè)靜態(tài)成員。(2)每當(dāng)main方法被執(zhí)行時(shí),就自動(dòng)生成上述三個(gè)對(duì)象。,System.err把錯(cuò)誤信息送到缺省的顯示(通常是顯示器),System.out把輸出送到缺省的顯示(通常是顯示器),Voidprint(參數(shù))Voidprintln(參數(shù)),System.in從標(biāo)準(zhǔn)輸入獲取輸入(通常是鍵盤(pán))intread()//返回ASCII碼。若返回值=-1,說(shuō)明沒(méi)有讀取到任何字節(jié)讀取工作結(jié)束。intread(byte[]b)//讀入多個(gè)字節(jié)到緩沖區(qū)b中返回值是讀入的字節(jié)數(shù),importjava.io.*;classTestKeyRead{publicstaticvoidmain(Stringargs[]){intb;try{while((b=System.in.read())!=-1){System.out.print((char)b);}}catch(IOExceptione){System.out.println(e.toString());}}},標(biāo)準(zhǔn)輸入流System.in.read(),byte[]buffer=newbyte[512];System.out.println("pleaseInput:");intcount=System.in.read(buffer);System.out.println("Output:");for(inti=0;i- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 輸入輸出流 輸入輸出 PPT 課件
鏈接地址:http://ioszen.com/p-11513069.html