版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、江蘇大學(xué)計(jì)算機(jī)學(xué)院 Version 2.0,第14章 高級(jí)I/O流,Page 2,Java 流式輸入/輸出原理 Java流類的分類 輸入/輸出流類 常見(jiàn)的節(jié)點(diǎn)流和處理流 文件流 緩沖流 數(shù)據(jù)流 轉(zhuǎn)換流 Print流 Object流,內(nèi)容,Page 3,Java流式輸入/輸出原理,在Java程序中,對(duì)于數(shù)據(jù)的輸入/輸出操作以“流” (stream) 方式進(jìn)行;J2SDK提供了各種各樣的“流”類,用以獲取不同種類的數(shù)據(jù);程序中通過(guò)標(biāo)準(zhǔn)的方法輸入或輸出數(shù)據(jù)。,文件,程序,文件, 00101,程序,網(wǎng)路連接,程序,程序,程序,文件,程序,“hello”,Page 4,流可以看作是從源開(kāi)始或到目的地的一
2、個(gè)數(shù)據(jù)流。 源流啟動(dòng)數(shù)據(jù)流,因此,也稱為輸入流。 目的流中止了數(shù)據(jù)流,因此也稱為輸出流。 源和目的都是兩個(gè)節(jié)點(diǎn)流。 節(jié)點(diǎn)流的類型是文件、內(nèi)存和線程或進(jìn)程之間的管道。,Java流式輸入/輸出原理,Page 5,流是一個(gè)很形象的概念,Page 6,輸入/輸出流的分類,java.io 包中定義了多個(gè)流類型(類或抽象類)來(lái)實(shí) 現(xiàn)輸入/輸出功能;可以從不同的角度對(duì)其進(jìn)行分類: 按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流。(以程序的角度來(lái)考慮) 按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流。 按照功能不同可以分為節(jié)點(diǎn)流和處理流。,J2SDK 所提供的所有流類型位于包java.io內(nèi)都分別繼承自以下四種抽象流類型
3、。,Page 7,節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流為可以從一個(gè)特定的數(shù)據(jù)源(節(jié)點(diǎn))讀寫數(shù)據(jù)(如:文件,內(nèi)存),數(shù)據(jù)源,程序,處理流是“連接”在已存在的流(節(jié)點(diǎn)流或處理流)之上,通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫功能。,節(jié)點(diǎn)流,數(shù)據(jù)源,數(shù)據(jù)源,程序,程序,Page 8,InputStream,繼承自InputSteam的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);下圖中深色為節(jié)點(diǎn)流,淺色為處理流。,Page 9,InputStream的基本方法,/讀取一個(gè)字節(jié)并以整數(shù)的形式返回(0255), /如果返回-1已到輸入流的末尾。 int read() throws IOExceptio
4、n /讀取一系列字節(jié)并存儲(chǔ)到一個(gè)數(shù)組buffer, /返回實(shí)際讀取的字節(jié)數(shù),如果讀取前已到輸入流的末尾返回-1 int read(byte buffer) throws IOException /讀取length個(gè)字節(jié) /并存儲(chǔ)到一個(gè)字節(jié)數(shù)組buffer,從off位置開(kāi)始存,最多l(xiāng)en /返回實(shí)際讀取的字節(jié)數(shù),如果讀取前以到輸入流的末尾返回-1 int read(byte buffer, int off, int len) throws IOException /關(guān)閉流釋放內(nèi)存資源 void close() throws IOException,其他方法包括 void close() : vo
5、id mark(int readlimit) int available() void reset() long skip(long n) boolean markSupported(),Page 10,OutputStream,繼承自O(shè)utputSteam的流是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);下圖中深色為節(jié)點(diǎn)流,淺色為處理流。,Page 11,OutputStream的基本方法,/向輸出流中寫入一個(gè)字節(jié)數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的低8位 void write(int b) throws IOException /將一個(gè)字節(jié)類型的數(shù)組中的數(shù)據(jù)寫入輸出流 void write
6、(byte b) throws IOException /將一個(gè)字節(jié)類型的數(shù)組中的從指定位置(off)開(kāi)始的 /len個(gè)字節(jié)寫入到輸出流 void write(byte b, int off, int len) throws IOException /關(guān)閉流釋放內(nèi)存資源 void close() throws IOException /將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地 void flush() throws IOException,良好的編程習(xí)慣,先f(wàn)lush(),再close(),Page 12,Reader,繼承自Reader的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bi
7、t);下圖中深色為節(jié)點(diǎn)流,淺色的為處理流。,Page 13,Reader 的基本方法,/讀取一個(gè)字符并以整數(shù)的形式返回(0255), /如果返回-1已到輸入流的末尾。 int read() throws IOException /讀取一系列字符并存儲(chǔ)到一個(gè)數(shù)組buffer, /返回實(shí)際讀取的字符數(shù),如果讀取前已到輸入流的末尾返回-1 int read(char cbuf) throws IOException /讀取length個(gè)字符 /并存儲(chǔ)到一個(gè)數(shù)組buffer,從off位置開(kāi)始存,最多讀取len /返回實(shí)際讀取的字符數(shù),如果讀取前以到輸入流的末尾返回-1 int read(char cb
8、uf, int off, int len) throws IOException /關(guān)閉流釋放內(nèi)存資源 void close() throws IOException,Page 14,Writer,繼承自Writer的流都是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bit);下圖中深色為節(jié)點(diǎn)流,淺色為處理流。,Page 15,Writer 的基本方法,/向輸出流中寫入一個(gè)字符數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的低16位 void write(int c) throws IOException /將一個(gè)字符類型的數(shù)組中的數(shù)據(jù)寫入輸出流, void write(char cbuf) throws IOE
9、xception /將一個(gè)字符類型的數(shù)組中的從指定位置(offset)開(kāi)始的 /length個(gè)字符寫入到輸出流 void write(char cbuf, int offset, int length) throws IOException /將一個(gè)字符串中的字符寫入到輸出流 void write(String string) throws IOException /將一個(gè)字符串從offset開(kāi)始的length個(gè)字符寫入到輸出流 void write(String string, int offset, int length) throws IOException /關(guān)閉流釋放內(nèi)存資源 voi
10、d close() throws IOException /將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地 void flush() throws IOException,Page 16,節(jié)點(diǎn)流,各種類型的字符和字節(jié)流類是:,Page 17,訪問(wèn)文件,FileInputStream和FileOutputStream分別繼承自InputStream和OutputStream用于向文件中輸入和輸出字節(jié)。 FileInputStream和FileOutputStream的常用構(gòu)造方法: FileInputStream(String name) throws FileNotFoundException File
11、InputStream(File file) throws FileNotFoundException FileOutputStream(String name)throws FileNotFoundException FileOutputStream(File file) throws FileNotFoundException FileOutputStream(File file, boolean append) throws FileNotFoundException,FileInputSteam 和 FileOutputStream 類支持其父類InputStream 和OutputS
12、tream 所提供的數(shù)據(jù)讀寫方法。 注意: 在實(shí)例化FileInputStream和FileOutputSteam流時(shí)要用trycatch語(yǔ)句以處理其可能拋出的FileNotFoundException。 在讀寫數(shù)據(jù)時(shí)也要用trycatch語(yǔ)句以處理可能拋出的 IOException。 FileNotFoundException是IOException的子類,例:TestFileInputStream.java / TestFileOutputStream.java,Page 18,訪問(wèn)文件,FileReader 和 FileWriter 分別繼承自Reader和Writer,F(xiàn)ileInpu
13、tSteam與FileOutputStream類似,所不同的時(shí)FileReader和FileWriter向文件輸入和輸出的數(shù)據(jù)單位為字符。 FileReader和FileWriter的常用構(gòu)造方法:,public FileWriter(File file) throws IOException public FileWriter(File file, boolean append) throws IOException public FileWriter(String fileName)throws IOException public FileWriter(String fileName,b
14、oolean append) throws IOException public FileReader(String fileName) throws FileNotFoundException public FileReader(File file) throws FileNotFoundException,例:TestFileWriter.java / TestFileReader.java,Page 19,I/O 流鏈接,輸入流鏈:,輸出流鏈:,Page 20,處理流類型,Page 21,緩沖流,緩沖流要套接在相應(yīng)的節(jié)點(diǎn)流之上,對(duì)讀寫的數(shù)據(jù)提供了緩沖功能,提高了讀寫的效率同時(shí)增加了一些新
15、的方法。 J2SDK提供四種緩沖流,其常用的構(gòu)造方法: BufferedReader(Reader in) BufferedReader(Reader in,int sz)/sz為自定義緩沖區(qū)大小 Buffered Writer (Writer out) Buffered Writer ( Writer out, int sz) BufferedInputStream(InputStream in) BufferedInputStream( InputStream in,int size) BufferedOutputStream (OutputStream out) BufferedOutp
16、utStream (OutputStream out,int size) 緩沖輸入流支持父類的mark和reset方法 BufferedReader提供了readLine方法用于讀取一行字符串(以r或n分隔) BufferedReader提供了newLine方法用于寫入一行分隔符 對(duì)于輸出的緩沖流,寫出的數(shù)據(jù)會(huì)先存在內(nèi)存的緩存,使用flush方法會(huì)將內(nèi)存中數(shù)據(jù)立刻寫出,TestBufferStream1/2.java,Page 22,轉(zhuǎn)化流,InputStreamReader 和 OutputStreamWriter /用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)化 InputStreamReader需要和
17、InputStream“套接” OutputStreamWriter需要和OutputStream“套接” 轉(zhuǎn)化流在構(gòu)造時(shí)可以指定其編碼集合 InputStream isr = new InputStreamReader(System.in,”ISO8859_1”),TestTransForm1/2.java,Page 23,數(shù)據(jù)流,DataInputStream 和DataOutputStream 分別繼承自InputStream和OutputStream,它屬于處理流,分別需要“套接”在InputStream和OutputStream類型的節(jié)點(diǎn)流上 DataInputStream 和Dat
18、aOutputStream提供了可以存取與機(jī)器無(wú)關(guān)的Java原始數(shù)據(jù)類型的方法 DataInputStream 和DataOutputStream的構(gòu)造方法為: DataInputStream (InputStream in) DataOutputStream(OutputStream out),TestDataStream.java,Page 24,Print流,PrintStream和 PrintWriter都是輸出流,分別針對(duì)字符和字節(jié) PrintStream和 PrintWriter提供了重載的print方法 Println方法用于多種數(shù)據(jù)類型的輸出 PrintStream和 Prin
19、tWriter的輸出操作不會(huì)拋出異常,用戶通過(guò)檢測(cè)錯(cuò)誤狀態(tài)獲取錯(cuò)誤信息 PrintStream和 PrintWriter有自動(dòng)flush功能 PrintStream(OutputStream out) PrintStream(OutputStream out,boolean autoFlush) PrintWriter(Writer out) PrintWriter(Writer out,boolean autoFlush),TestPrintStream1/2/3.java,Page 25,Object流,ObjectInputStream / ObjectOutputStream /直接將Object讀入或者寫出 public ObjectInputStream(InputStream in) throws IOException/創(chuàng)建一個(gè)輸入流對(duì)象,可以從指定的輸入流對(duì)象in中讀取對(duì)象,讀取的對(duì)象必須是序列化的 public ObjectOutputStream(outputStream out) throws IOException /創(chuàng)建一個(gè)輸出流對(duì)象,可以把一個(gè)序列化對(duì)象寫入到指定的輸出流out中 對(duì)象的序列化 所謂序列化就是把對(duì)象把對(duì)象轉(zhuǎn)換為一系列的字節(jié)來(lái)記錄
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州鐵路職業(yè)技術(shù)學(xué)院《攝影攝像》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)春醫(yī)學(xué)高等??茖W(xué)?!段⑸镔Y源保護(hù)與利用》2023-2024學(xué)年第一學(xué)期期末試卷
- 玉溪農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《程序設(shè)計(jì)技術(shù)(C語(yǔ)言)》2023-2024學(xué)年第一學(xué)期期末試卷
- 物聯(lián)網(wǎng)設(shè)備電源功耗降低
- IT項(xiàng)目季報(bào)告模板
- 實(shí)習(xí)機(jī)會(huì)獲取指導(dǎo)
- 初一軍訓(xùn)學(xué)生發(fā)言稿
- 村容村情調(diào)研報(bào)告
- 統(tǒng)編版六年級(jí)語(yǔ)文上冊(cè)寒假作業(yè)(九)(有答案)
- 二零二五版房屋租賃合同附押金退還條款2篇
- 綠色供應(yīng)鏈管理制度內(nèi)容
- 心理學(xué)基礎(chǔ)知識(shí)考試參考題庫(kù)500題(含答案)
- 電力智慧檢修安全運(yùn)行三維可視化管理平臺(tái)建設(shè)方案
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 消防安全應(yīng)急預(yù)案下載
- 《北航空氣動(dòng)力學(xué)》課件
- 附件:財(cái)政業(yè)務(wù)基礎(chǔ)數(shù)據(jù)規(guī)范(3.0版)
- 電商公司售后服務(wù)管理制度
- 火災(zāi)應(yīng)急處理課件
- 創(chuàng)新者的逆襲3:新質(zhì)生產(chǎn)力的十八堂案例課-記錄
- 2024年河南省公務(wù)員考試《行測(cè)》真題及答案解析
評(píng)論
0/150
提交評(píng)論