《輸入輸出流》PPT課件.ppt
《《輸入輸出流》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《輸入輸出流》PPT課件.ppt(42頁珍藏版)》請(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語言采用流的機(jī)制來實(shí)現(xiàn)輸入/輸出。所謂流,就是數(shù)據(jù)的有序排列,而流可以是從某個(gè)源(稱為流源,SourceofStream)出來,到某個(gè)目的地(稱為流匯,SinkofStream)去的。根據(jù)流的方向可以將流分成輸入流和輸出流。一個(gè)程序總是從輸入流讀取數(shù)據(jù),而向輸出流寫出數(shù)據(jù)Java中負(fù)責(zé)I/O的類(稱為流類)統(tǒng)一存放在java.io包中。該包又叫做I/O庫,流的處理過程(輸入),用來處理流的流類又稱為流處理器例如,一個(gè)java程序可以使用FileInputStream類直接從一個(gè)文件中讀取數(shù)據(jù),如下圖所示:,像FileInputStream這樣的流類叫做流處理器。一個(gè)流處理器就像一個(gè)流的管道一樣,從一個(gè)流源吸入某種類型的數(shù)據(jù),并輸出某種類型的數(shù)據(jù)。,類似地,也可以用FileOutputStream類直接向一個(gè)文件中寫出數(shù)據(jù),如下圖所示:,在實(shí)際應(yīng)用當(dāng)中,這種簡(jiǎn)單的機(jī)制并沒有太大的用處。因?yàn)槌绦蛐枰獙懗龅耐欠浅=Y(jié)構(gòu)化的信息,比如數(shù)值、文字、源代碼等。這樣一來,數(shù)據(jù)的轉(zhuǎn)換工作將十分復(fù)雜。,流的處理過程(輸出),流的處理過程(鏈接機(jī)制),Java的I/O庫提供了一個(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)流(原始流處理器),過濾流(鏈接流處理器),類似地,向一個(gè)文件寫入byte類型的數(shù)據(jù)不是一個(gè)簡(jiǎn)單的過程:一個(gè)程序需要向一個(gè)文件里面寫入的數(shù)據(jù)往往是結(jié)構(gòu)化的,而不是byte類型的,因此在利用FileOutputStream寫的時(shí)候必須首先經(jīng)過轉(zhuǎn)換。DataOutputStream流處理器提供了直接接收基本數(shù)據(jù)類型和String類型的方法,而這個(gè)流處理器的輸出數(shù)據(jù)則是byte類型。這樣一來,可以將DataOutputStream和FileOutputStream鏈接起來,達(dá)到直接將結(jié)構(gòu)化的數(shù)據(jù)寫入到文件中的目的。,int類型的數(shù)據(jù)float類型的數(shù)據(jù)String類型的數(shù)據(jù),流的處理過程(鏈接機(jī)制),JavaI/O庫,流處理器所處理的流必定都有流源(匯),流源(匯)分成兩大類:數(shù)組、String、File等,叫原始流源。用于鏈接流類的流源,叫鏈接流源。Java語言的I/O庫是對(duì)各種常見的流源、流匯、以及處理過程的抽象化,Java語言的I/O庫是由一些基本的原始流處理器和圍繞它們的鏈接流處理器所組成的,按處理數(shù)據(jù)的單位劃分,Java支持兩種基本的流類型:字符流和字節(jié)流,JavaI/O庫的設(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)流處理器,其他是過濾流處理器。,原始流處理器:接收一個(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:(已過時(shí))此類未能正確地將字符轉(zhuǎn)換為字節(jié)。從JDK1.1開始,從字符串創(chuàng)建流的首選方法是通過StringReader類進(jìn)行創(chuàng)建。,原始流處理器,鏈接流處理器:就是可以接收另一個(gè)流對(duì)象作為流源,并對(duì)之進(jìn)行功能擴(kuò)展的流類InputStream類型的鏈接流處理器包括以下7個(gè),都接收另一個(gè)InputStream對(duì)象作為流源。FilterInputStream:過濾輸入流,它將另一個(gè)輸入流作為流源。它有4個(gè)子類:BufferedInputStream:用來從硬盤將數(shù)據(jù)讀入到一個(gè)內(nèi)存緩沖區(qū)中,并從該緩沖區(qū)提供數(shù)據(jù)。DataInputStream:提供基于多字節(jié)的讀取方法,可以讀取基本數(shù)據(jù)類型的數(shù)據(jù)。LineNumberInputStream:提供帶有行計(jì)數(shù)功能的過濾輸入流。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);//跳過流中指定字節(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:過濾輸出流,它將另一個(gè)輸出流作為流匯。其子類有:BufferedOutputStream:向一個(gè)內(nèi)存緩沖區(qū)中寫出數(shù)據(jù),并將此中的數(shù)據(jù)輸出到硬盤中DataOutputStream:可以寫出基本數(shù)據(jù)類型的數(shù)據(jù)PrintStream:用于產(chǎn)生格式化輸出ObjectOutputStream:將基本數(shù)據(jù)類型和對(duì)象串行化,鏈接輸出流處理器,讀方法voidwrite(intb);//將指定的字節(jié)寫入此輸出流。write的常規(guī)協(xié)定是:向輸出流寫入一個(gè)字節(jié)。要寫入的字節(jié)是參數(shù)b的八個(gè)低位。b的24個(gè)高位將被忽略。OutputStream的子類必須提供此方法的實(shí)現(xiàn)。voidwrite(byte[]b);//向輸出流中寫一個(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)完成輸入流的寫操作后關(guān)閉流。其他方法Voidflush();//強(qiáng)制將緩存的輸出數(shù)據(jù)寫出到流匯。,流處理器的基本方法,如果需要對(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)行裝飾,使得流的寫出操作使用緩沖操作,提高程序效率。在涉及到物理流的地方,比如控制臺(tái)I/O、文件I/O等,都應(yīng)當(dāng)使用這個(gè)裝飾流處理器,兩點(diǎn)說明,示例程序,從字節(jié)數(shù)組中讀取數(shù)據(jù),并在屏幕上顯示讀取的內(nèi)容,同時(shí)將該內(nèi)容寫入指定的文件IODemo.txt中。讀入字符串中的字符將奇數(shù)位的字母轉(zhuǎn)換為大寫并輸出,java.lang.SystempublicfinalclassSystemextendsObject{staticPrintStreamerr;//標(biāo)準(zhǔn)錯(cuò)誤流(輸出)staticInputStreamin;//標(biāo)準(zhǔ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)輸入獲取輸入(通常是鍵盤)intread()//返回ASCII碼。若返回值=-1,說明沒有讀取到任何字節(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)容而直接下載帶來的問題本站不予受理。
- 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文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 輸入輸出流 輸入輸出 PPT 課件
鏈接地址:http://kudomayuko.com/p-11513069.html