歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

《輸入輸出流》PPT課件.ppt

  • 資源ID:11513069       資源大?。?span id="djodgqw" class="font-tahoma">1.98MB        全文頁數(shù):42頁
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

《輸入輸出流》PPT課件.ppt

第7章輸入/輸出流,主講教師:丁天翔,本章知識點,流的概念InputStream和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ù),如下圖所示:,在實際應用當中,這種簡單的機制并沒有太大的用處。因為程序需要寫出的往往是非常結(jié)構(gòu)化的信息,比如數(shù)值、文字、源代碼等。這樣一來,數(shù)據(jù)的轉(zhuǎn)換工作將十分復雜。,流的處理過程(輸出),流的處理過程(鏈接機制),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庫的設計原則,兩個對稱性:輸入輸出對稱:InputStream和OutputStream各自占據(jù)byte流的輸入與輸出的兩個平行的類等級結(jié)構(gòu)的根部;而Reader和Writer各自占據(jù)char流的輸入與輸出的兩個平行的類等級結(jié)構(gòu)的根部bytechar對稱: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:建立一個與文件有關的輸入流,接收一個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(byteb);/將讀入的數(shù)據(jù)放在一個字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。intread(byteb,intoff,intlen);/將讀入的數(shù)據(jù)放在一個字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。兩個參數(shù)是讀入數(shù)據(jù)后存放在b中的位置。流的關閉方法voidclose();/用于關閉流。其他方法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(byteb);/向輸出流中寫一個字節(jié)數(shù)組。Voidwrite(byteb,intoff,intlen);/將讀入的數(shù)據(jù)放在一個字節(jié)數(shù)組b中,返回所讀的字節(jié)數(shù)。兩個參數(shù)是讀入數(shù)據(jù)后存放在b中的位置。流的關閉方法voidclose();/當完成輸入流的寫操作后關閉流。其他方法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等,都應當使用這個裝飾流處理器,兩點說明,示例程序,從字節(jié)數(shù)組中讀取數(shù)據(jù),并在屏幕上顯示讀取的內(nèi)容,同時將該內(nèi)容寫入指定的文件IODemo.txt中。讀入字符串中的字符將奇數(shù)位的字母轉(zhuǎn)換為大寫并輸出,java.lang.SystempublicfinalclassSystemextendsObjectstaticPrintStreamerr;/標準錯誤流(輸出)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(byteb)/讀入多個字節(jié)到緩沖區(qū)b中返回值是讀入的字節(jié)數(shù),importjava.io.*;classTestKeyReadpublicstaticvoidmain(Stringargs)intb;trywhile(b=System.in.read()!=-1)System.out.print(char)b);catch(IOExceptione)System.out.println(e.toString();,標準輸入流System.in.read(),bytebuffer=newbyte512;System.out.println("pleaseInput:");intcount=System.in.read(buffer);System.out.println("Output:");for(inti=0;i<count;i+)System.out.print("“+bufferi);System.out.println();for(inti=0;i<count;i+)System.out.print(char)bufferi);Strings=newString(buffer);System.out.println(s);System.out.println(count);,標準輸入流System.in.read(byteb),程序輸出:,標準輸入流實現(xiàn)中文處理,BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in);/將System.in封裝到一個BufferedReader中Echo.java,字符流Reader,Reader有6個直接子類:,原始流處理器:CharArrayReader:為多線程通信提供緩沖區(qū)操作功能InputStreamReader:有一個子類FileReader,將字節(jié)流轉(zhuǎn)換為字符流PipedReader:與PipedInputStream配合使用,用于讀入一個數(shù)據(jù)管道里的數(shù)據(jù)StringReader:建立一個與文件有關的輸入流鏈接流處理器:BufferedReader:從硬盤將數(shù)據(jù)讀入到一個內(nèi)存緩沖區(qū),并從該緩沖區(qū)提供數(shù)據(jù)FilterReader:它將另一個輸入流作為流源,字符流Reader,有7個直接子類:,字符輸出流Writer,原始流處理器:CharArrayWriter:為多線程通信提供緩沖區(qū)操作功能OutputStreamWriter:建立一個與文件有關的輸出流PipedWriter:與PipedOutputStream配合使用StringWriter:向一個StringBuffer寫出數(shù)據(jù)鏈接流處理器:BufferedWriter:為Writer類型的流處理器提供緩沖區(qū)功能FilterWriter:沒有子類的抽象類,將另一個輸出流作為流源PrintWriter:支持格式化的文字輸出,字符輸出流Writer,從byte流到char流的適配,InputStreamReader是從byte流到char流的一個橋梁,它讀入byte數(shù)據(jù)并根據(jù)指定的編碼將之翻譯成為char數(shù)據(jù)當把InputStreamReader與任何InputStream的具體子類鏈接時,可以從InputStream的輸出讀入byte類型的數(shù)據(jù),將之轉(zhuǎn)換成char類型的數(shù)據(jù),InputStream,byte類型的數(shù)據(jù),byte類型的數(shù)據(jù),源,InputStreamReader,char類型的數(shù)據(jù),匯,類似地,當與任何一個OutputStream的具體子類鏈接時,OutputStreamWriter可以將char類型的數(shù)據(jù)轉(zhuǎn)換成為byte類型的數(shù)據(jù),再交給輸出流,OutputStreamWriter,char類型的數(shù)據(jù),byte類型的數(shù)據(jù),源,OutputStream,byte類型的數(shù)據(jù),匯,從byte流到char流的適配,如何使用I/O流?,流處理器分為原始流處理器和鏈接流處理器。根據(jù)不同的流源,先選定合適的原始流處理器,然后用適當?shù)逆溄恿魈幚砥鱽硌b飾它,最后用我們最終得到的鏈接流處理器對象來完成I/O操作以打開一個文件進行輸入為例:為了對文件進行操作,需要使用一個FileInputStream(原始流);為了提高速度,最好先對文件進行緩沖處理,可以用一個BufferedInputStream(鏈接流)來裝飾它;為了以格式化的形式讀取輸入數(shù)據(jù),再用一個DataInputStream(鏈接流)來裝飾它。這樣,最終我們得到了一個DataInputStream對象,使用該對象來執(zhí)行文件操作:DataInputStreamin=newDataInputStream(newBufferedInputStream(newFileInputStream(“Test.java”);in.readLine();,文件處理,在java.io包中,有File類提供了描述文件和目錄的操作與管理方法。File不是輸入/輸出流類的子類,不負責數(shù)據(jù)的輸入/輸出,專門用來管理磁盤文件與目錄。File類定義了一些與平臺無關的方法進行文件操作,如建立、刪除、查詢、重命名等??梢杂盟鼇肀硎灸硞€文件的名字,也可以用它來表示目錄里一組文件的名字。創(chuàng)建File類文件對象File(Stringpath);/如:File(“F:/java/temp.dat”)File(Stringpath,Stringname);File(Filedir,Stringname);,文件處理,文件名的處理StringgetName();/得到一個文件的名稱(不包括路徑)StringgetPath();/得到一個文件的路徑名StringgetAbsolutePath();/得到一個文件的絕對路徑名StringgetParent();/得到一個文件的上一級目錄名文件屬性測試booleanexists();/測試當前File對象所指示的文件是否存在booleancanWrite();/測試當前文件是否可寫booleancanRead();/測試當前文件是否可讀booleanisFile();/測試當前文件是否是文件(不是目錄)booleanisDirectory();/測試當前文件是否是目錄,文件處理,普通文件信息和工具longlastModified();/得到文件最近一次修改的時間,用與時間點(1970年1月1日,00:00:00GMT)之間的毫秒數(shù)表示;longlength();/得到文件的長度,以字節(jié)為單位booleandelete();/刪除當前文件目錄操作booleanmkdir();/根據(jù)當前對象生成一個由該對象指定的路徑Stringlist();/列出當前目錄下的文件示例程序:FileDemo.java,對象流,Java可以將對象作為一個整體通過對象流進行傳輸和存儲。ObjectInputStream和ObjectOutputStream分別是對象流的輸入和輸出流處理器。構(gòu)造方法:ObjectInputStream(InputStreamin);ObjectOutputStream(OutputStreamout);當使用對象流寫入或讀出一個對象時,其前提是這個對象必須是序列化的。,對象序列化,Java1.1增添了一種有趣的特性,名為“對象序列化”(ObjectSerialization)。它面向那些實現(xiàn)了Serializable接口(該接口僅是一個標識接口,沒有方法)的對象,可將它們轉(zhuǎn)換成一系列字節(jié),并可在以后完全恢復回原來的樣子。這一過程亦可通過網(wǎng)絡進行。利用它可以實現(xiàn)“持久化(persistent)”。通過序列化一個對象,將其寫入磁盤,以后在程序重新調(diào)用時重新恢復那個對象,就能圓滿實現(xiàn)一種“持久”效果。,對象序列化,為序列化一個對象,首先要創(chuàng)建某些OutputStream對象,然后將其封裝到ObjectOutputStream對象內(nèi)。此時,只需調(diào)用writeObject()即可完成對象的序列化,并將其發(fā)送給OutputStream相反的過程是:將一個InputStream封裝到ObjectInputStream內(nèi),然后調(diào)用readObject()。我們最后獲得的是一個Object對象,必須做向下類型轉(zhuǎn)換示例:Example8_11.java,Example8_12.java,RandomAccessFile類,RandomAccessFile是用來隨機訪問那些保存數(shù)據(jù)記錄的文件的,而不用按照流的順序一次讀取。構(gòu)造方法:RandomAccessFile(Stringname,Stringmode)name是文件名mode是打開方式,“r”只讀,“rw”可讀寫RandomAccessFile(Filefile,Stringmode);file是文件對象mode是打開方式,“r”只讀,“rw”可讀寫注意:RandomAccessFile類并不是單純的輸入或輸出流,因此它不是InputStream、OutputStream類的子類。它直接繼承了Object,實現(xiàn)了DataInput和DataOutput接口。,RandomAccessFile類,文件指針的操作longgetFilePointer();/用于得到當前的文件指針voidseek(longpos);/用于移動文件指針到指定的位置intskipBytes(intn);/使文件指針向前移動指定的n個字節(jié)示例:RandomAccessFileDemo.java,重定向標準I/O,Java1.1在System類中添加了特殊的方法,允許我們重新定向標準輸入、輸出以及錯誤IO流。此時要用到下述簡單的靜態(tài)方法調(diào)用:setIn(InputStream)setOut(PrintStream)setErr(PrintStream)如果突然要在屏幕上生成大量輸出,而且滾動的速度快于人們的閱讀速度,輸出的重定向就顯得特別有用。在一個命令行程序中,如果想重復測試一個特定的用戶輸入序列,輸入的重定向也顯得特別有價值。,重定向標準IO示例,將標準輸入同一個文件連接起來,并將標準輸出和錯誤重定向至另一個文件。程序代碼詳見Redirecting.java,程序輸出結(jié)果如下:,

注意事項

本文(《輸入輸出流》PPT課件.ppt)為本站會員(sh****n)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!