版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java流流的概述流的分類InputStream/OutputStreamReader/Writer流的幾種典型流向RandomAccessFile的用法Zip格式文件的壓縮/解壓I/O流概述為進(jìn)行數(shù)據(jù)的輸入/輸出操作,Java中把不同的輸入/輸出源(鍵盤、文件、網(wǎng)絡(luò)連接等)抽象表述為“流”(stream)。Stream是從起源(source)到接收(sink)的有序數(shù)據(jù)java.io包中定義了多個(gè)流類型(類或抽象類)來實(shí)現(xiàn)輸入/輸出功能。兩種基本的流:輸入流和輸出流輸入流:只能從中讀取字節(jié)數(shù)據(jù),而不能向其寫出數(shù)據(jù)輸出流:只能向其寫入字節(jié)數(shù)據(jù),而不能從中讀取數(shù)據(jù)按照流所處理的數(shù)據(jù)類型劃分,可以分為:字節(jié)流:用于處理字節(jié)數(shù)據(jù)。字符流:用于處理Unicode字符數(shù)據(jù)。節(jié)點(diǎn)流和處理流可以從/向一個(gè)特定的IO設(shè)備(如磁盤、網(wǎng)絡(luò))讀/寫數(shù)據(jù)的流,稱為節(jié)點(diǎn)流。節(jié)點(diǎn)流也被稱為低級(jí)流。實(shí)現(xiàn)對(duì)一個(gè)已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀/寫功能的流,稱為處理流。處理流也被稱為高級(jí)流。數(shù)據(jù)源程序數(shù)據(jù)源程序InputStream/OutputStreamInputStream/OutputStream用于處理字節(jié)數(shù)據(jù)。它們讀/寫流的方式都是以字節(jié)為單位進(jìn)行的。InputStream基本方法三個(gè)基本的read方法:intread():讀取一個(gè)字節(jié),并將它返回。intread(byte[]buffer):將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,同時(shí)返回讀取的字節(jié)數(shù)。intread(byte[]buffer,intoffset,intlength):將數(shù)據(jù)讀入一個(gè)字節(jié)數(shù)組,放到數(shù)組的offset指定的位置開始,并用length來指定讀取的最大字節(jié)數(shù)。
其它方法:voidclose():關(guān)閉流。intavailable():返回可以從中讀取的字節(jié)數(shù)。longskip(longn):在輸入流中跳過n個(gè)字節(jié),將實(shí)際跳過的字節(jié)數(shù)返回。booleanmarkSupported():判斷流是否支持標(biāo)記功能。voidmark(intreadlimit):在支持標(biāo)記的輸入流的當(dāng)前位置設(shè)置一個(gè)標(biāo)記。voidreset():返回到流的上一個(gè)標(biāo)記。注意必須流支持標(biāo)記功能。常見InputStream類低級(jí)InputStream類:InputStreamByteArrayInputStreamPipedInputStreamFileInputStream高級(jí)InputStream類:DataInputStreamBufferedInputStreamInputStream類層次InputStreamFileInputStreamPipedInputStreamObjectInputStreamSequenceInputStreamFilterInputStreamStringBufferInputStreamByteArrayInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamLineNumberInputStream節(jié)點(diǎn)流處理流InputStream例子 …… try{ fis=newFileInputStream(args[0]); //從文件讀取數(shù)據(jù)
while((n=fis.read(buff))!=-1) { //寫入System.out中
System.out.write(buff,0,n); }} catch(FileNotFoundExceptione){ System.out.println("沒有找到文件"); System.exit(1);} ……(示例10-1)OutputStream基本方法三個(gè)基本的write方法:voidwrite(intc)voidwrite(byte[]buffer)voidwrite(byte[]buffer,intoffset,intlength)
其它方法voidclose()voidflush()OutputStream類低級(jí)OutputStreamOutputStreamByteArrayOutputStreamPipedOutputStream高級(jí)OutputStreamDataOutputStreamBufferedOutputStreamOutputStream類層次OutputStreamFileOutputStreamObjectOutputStreamFilterInputStreamByteArrayOutputStreamDataOutputStreamBufferedOutputStreamPrintStreamPipedOutputStream節(jié)點(diǎn)流處理流OutputStream例子 FileOutputStreamout; //聲明一個(gè)PrintStream流
PrintStreamp;
try{ out=newFileOutputStream("myfile.txt"); p=newPrintStream(out); p.println("面朝大海,春暖花開"); p.close(); }catch(Exceptione){ System.err.println("Errorwritingtofile"); }(示例10-2)通過Stream拷貝文本文件例子通過FileInputStream和FileOutputStream,實(shí)現(xiàn)從一個(gè)文本文件拷貝內(nèi)容到另一個(gè)文件的例子通過FileInputStream從源文本文件中讀出數(shù)據(jù),然后通過FileOutputStream寫入到另外一個(gè)文本文件中。(示例10-3)Reader/WriterReader/Writer處理的是字符類型的數(shù)據(jù)。它處理流的方式是以字符為單位進(jìn)行的。Reader/Writer和InputStream/OutputStream一樣,也分為節(jié)點(diǎn)流(低級(jí)流)和處理流(高級(jí)流)。Reader和InputStream一樣,用于從流中讀取數(shù)據(jù)。它和InputStream的區(qū)別在于,InputStream以字節(jié)為單位操作流,而Reader以字符為單位操作流。Reader常用方法讀取方法:intread():用于從流中讀出一個(gè)字符,并將它返回。intread(char[]buffer):將從流中讀出的字符放到字符數(shù)組buffer中,返回讀出的字符數(shù)。intread(char[]buffer,intoffset,intlength):將讀出的字符放到字符數(shù)組的指定offset開始的空間,每次最多讀出length個(gè)字符。其他方法:voidclose():關(guān)閉Reader流。booleanready():判斷流是否已經(jīng)準(zhǔn)備好被讀取。skip(longn):跳過指定的n個(gè)字符。booleanmarkSupported():和InputStream中的markSupported方法類似。voidmark(intreadAheadLimit):和InputStream中的mark方法類似。voidreset():和InputStream中的reset方法類似。Reader相關(guān)類低級(jí)Reader類:CharArrayReaderStringReaderPipedReaderFileReader高級(jí)Reader類BufferedReaderInputStreamReaderLineNumberReaderReader類層次ReaderBufferedReaderStringReaderCharArrayReaderInputStreamReaderPipedReaderFilterReaderFileReaderPushbackReaderLineNumberReader節(jié)點(diǎn)流處理流Reader例子FileReaderfr=newFileReader("C:/nos/tmp/mydata.txt"); BufferedReaderbr=newBufferedReader(fr); record=newString(); while((record=br.readLine())!=null){ recCount++; System.out.println("Line"+recCount+":"+record); }(示例10-4)Writer常用方法寫入方法voidwrite(intc):將參數(shù)c的低16位組成字符寫入到流中。voidwrite(char[]buffer):將字符數(shù)組buffer中的字符寫入到流中。voidwrite(char[]buffer,intoffset,intlength):將字符數(shù)組buffer中從offset開始的length個(gè)字符寫入到流中。voidwrite(Stringstring):將string字符串寫入到流中。voidwrite(Stringstring,intoffset,intlength):將字符string中從offset開始的length個(gè)字符寫入到流中。其他方法voidclose():和OutputStream的close方法類似。voidflush():和OutputStream的flush方法類似。Writer相關(guān)類低級(jí)Writer類:CharArrayWriterStringWriterPipedWriterFileWriter高級(jí)Writer類:BufferedWriterOutputStreamWriterPrintWriterWriter類層次WriterBufferedWriterStringWriterCharArrayWriterPipedWriterOutputStreamWriterPrintWriterFilterWriterFileWriter節(jié)點(diǎn)流處理流Writer例子try{ FileWriterfw=newFileWriter("mydata.txt"); PrintWriterout=newPrintWriter(fw); out.print("面朝大海,春暖花開!"); out.close(); fw.close();}catch(IOExceptione){ e.printStackTrace();}(示例10-5)緩沖流緩沖流要“套接”在相應(yīng)的節(jié)點(diǎn)流之上,對(duì)讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫的效率,同時(shí)增加了一些新的方法。J2SDK提供了四種緩存流:BufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStream緩沖流緩沖輸入流支持其父類的mark()和reset()方法:mark()用于“標(biāo)記”當(dāng)前位置,就像加入了一個(gè)書簽,可以使用reset()方法返回這個(gè)標(biāo)記重新讀取數(shù)據(jù)。BufferedReader提供了readLine()方法用于讀取一行字符串(以\r或\n分隔)。BufferedWriter提供了newLine()用于寫入一個(gè)行分隔符。對(duì)于輸出的緩沖流,寫出的數(shù)據(jù)會(huì)先在內(nèi)存中緩存,使用flush()方法將會(huì)使內(nèi)存中的數(shù)據(jù)立刻寫出。流的幾種典型流向A-file(bytes)FileInputStream(bytes)DataInputStream(String)A-File(bytes)FileInputStream(bytes)BufferedInputStream(bytes)DataInputStream(ints,floats,Strings,others)(bytes)(bytes)FileReader(chars/Strings)LineNumberReader(chars/strings)特殊的文件流--RandomAccessFileRandomAccess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀杏樹種植合同(2篇)
- 誠(chéng)信課件 小學(xué)
- 古詩詞誦讀《涉江采芙蓉》-高一語文上學(xué)期同步備課拓展(統(tǒng)編版必修上冊(cè))
- 太陽課件人教版
- 繩子莫泊桑課件
- 2.13有理數(shù)的混合運(yùn)算課件教學(xué)
- 西京學(xué)院《復(fù)變函數(shù)與積分變換》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《大數(shù)據(jù)開發(fā)技術(shù)》2022-2023學(xué)年期末試卷
- 西華師范大學(xué)《中小學(xué)課堂樂器》2021-2022學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《學(xué)科課程與教學(xué)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 新版中小學(xué)生守則和日常行為規(guī)范
- 建筑消防設(shè)施維護(hù)保養(yǎng)記錄表(每月)
- 醫(yī)院提高靜脈輸液規(guī)范使用率實(shí)施方案
- 發(fā)現(xiàn)問題和解決問題課件
- 電動(dòng)滑板車行業(yè)報(bào)告
- 大班數(shù)學(xué)活動(dòng)等分課件
- 《防打架斗毆》主題班會(huì)課件
- 人教版五年級(jí)數(shù)學(xué)上冊(cè)專項(xiàng)計(jì)算題12套(每日一練)
- 病例討論乳腺癌
- 牙體牙髓病教學(xué)設(shè)計(jì)
- 2024年河南省機(jī)場(chǎng)集團(tuán)有限公司招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論