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