資源描述:
《《輸入輸出流》PPT課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第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中負(fù)責(zé)I/O的類(稱為流類)統(tǒng)一存放在java.io包中。該包又叫做I/O庫流
2、的處理過程(輸入)用來處理流的流類又稱為流處理器例如,一個java程序可以使用FileInputStream類直接從一個文件中讀取數(shù)據(jù),如下圖所示:FileInputStreambyte類型的數(shù)據(jù)byte類型的數(shù)據(jù)源磁盤文件像FileInputStream這樣的流類叫做流處理器。一個流處理器就像一個流的管道一樣,從一個流源吸入某種類型的數(shù)據(jù),并輸出某種類型的數(shù)據(jù)。類似地,也可以用FileOutputStream類直接向一個文件中寫出數(shù)據(jù),如下圖所示:FileOutputStreambyte類型的數(shù)據(jù)byte類型的數(shù)據(jù)匯磁盤文件在實際應(yīng)用當(dāng)中,這種簡單的機制并沒有太大的用處。因為程序需
3、要寫出的往往是非常結(jié)構(gòu)化的信息,比如數(shù)值、文字、源代碼等。這樣一來,數(shù)據(jù)的轉(zhuǎn)換工作將十分復(fù)雜。流的處理過程(輸出)流的處理過程(鏈接機制)Java的I/O庫提供了一個稱作鏈接(Chaining)的機制,可以將一個流處理器與另一個流處理器首尾相接,以其中之一的輸出為輸入,形成一個流管道的鏈接例如:DataInputStream流處理器可以把FileInputStream流對象的輸出當(dāng)作輸入,將byte類型的數(shù)據(jù)轉(zhuǎn)換成java的基本數(shù)據(jù)類型和String類型的數(shù)據(jù),如下圖所示:FileInputStreambyte類型的數(shù)據(jù)byte類型的數(shù)據(jù)源磁盤文件DataInputStreamint
4、類型的數(shù)據(jù)float類型的數(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ù)floa
5、t類型的數(shù)據(jù)String類型的數(shù)據(jù)DataOutputStreambyte類型的數(shù)據(jù)匯磁盤文件byte類型的數(shù)據(jù)FileOutputStream流的處理過程(鏈接機制)JavaI/O庫流處理器所處理的流必定都有流源(匯),流源(匯)分成兩大類:數(shù)組、String、File等,叫原始流源。用于鏈接流類的流源,叫鏈接流源。Java語言的I/O庫是對各種常見的流源、流匯、以及處理過程的抽象化,Java語言的I/O庫是由一些基本的原始流處理器和圍繞它們的鏈接流處理器所組成的,按處理數(shù)據(jù)的單位劃分,Java支持兩種基本的流類型:字符流和字節(jié)流JavaI/O庫的設(shè)計原則兩個對稱性:輸入-輸出對稱
6、:InputStream和OutputStream各自占據(jù)byte流的輸入與輸出的兩個平行的類等級結(jié)構(gòu)的根部;而Reader和Writer各自占據(jù)char流的輸入與輸出的兩個平行的類等級結(jié)構(gòu)的根部byte-char對稱:InputStream與Reader的子類分別負(fù)責(zé)byte和char流的輸入;OutputStream和Writer的子類分別負(fù)責(zé)byte和char流的輸出輸入字節(jié)流InputStreamInputStream有7個直接子類,有4個屬于FilterInputStream的子類注:圖中深色的類是節(jié)點流處理器,其他是過濾流處理器。InputStreamFileInputS
7、treamPipedInputStreamObjectInputStreamSequenceInputStreamFilterInputStreamStringBufferInputStreamByteArrayInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamLineNumberInputStream原始流處理器:接收一個byte數(shù)組對象、String對象、File對象等原始流