版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、江蘇大學計算機學院 Version 2.0,第14章 高級I/O流,Page 2,Java 流式輸入/輸出原理 Java流類的分類 輸入/輸出流類 常見的節(jié)點流和處理流 文件流 緩沖流 數(shù)據(jù)流 轉換流 Print流 Object流,內容,Page 3,Java流式輸入/輸出原理,在Java程序中,對于數(shù)據(jù)的輸入/輸出操作以“流” (stream) 方式進行;J2SDK提供了各種各樣的“流”類,用以獲取不同種類的數(shù)據(jù);程序中通過標準的方法輸入或輸出數(shù)據(jù)。,文件,程序,文件, 00101,程序,網(wǎng)路連接,程序,程序,程序,文件,程序,“hello”,Page 4,流可以看作是從源開始或到目的地的一
2、個數(shù)據(jù)流。 源流啟動數(shù)據(jù)流,因此,也稱為輸入流。 目的流中止了數(shù)據(jù)流,因此也稱為輸出流。 源和目的都是兩個節(jié)點流。 節(jié)點流的類型是文件、內存和線程或進程之間的管道。,Java流式輸入/輸出原理,Page 5,流是一個很形象的概念,Page 6,輸入/輸出流的分類,java.io 包中定義了多個流類型(類或抽象類)來實 現(xiàn)輸入/輸出功能;可以從不同的角度對其進行分類: 按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流。(以程序的角度來考慮) 按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流。 按照功能不同可以分為節(jié)點流和處理流。,J2SDK 所提供的所有流類型位于包java.io內都分別繼承自以下四種抽象流類型
3、。,Page 7,節(jié)點流和處理流,節(jié)點流為可以從一個特定的數(shù)據(jù)源(節(jié)點)讀寫數(shù)據(jù)(如:文件,內存),數(shù)據(jù)源,程序,處理流是“連接”在已存在的流(節(jié)點流或處理流)之上,通過對數(shù)據(jù)的處理為程序提供更為強大的讀寫功能。,節(jié)點流,數(shù)據(jù)源,數(shù)據(jù)源,程序,程序,Page 8,InputStream,繼承自InputSteam的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);下圖中深色為節(jié)點流,淺色為處理流。,Page 9,InputStream的基本方法,/讀取一個字節(jié)并以整數(shù)的形式返回(0255), /如果返回-1已到輸入流的末尾。 int read() throws IOExceptio
4、n /讀取一系列字節(jié)并存儲到一個數(shù)組buffer, /返回實際讀取的字節(jié)數(shù),如果讀取前已到輸入流的末尾返回-1 int read(byte buffer) throws IOException /讀取length個字節(jié) /并存儲到一個字節(jié)數(shù)組buffer,從off位置開始存,最多l(xiāng)en /返回實際讀取的字節(jié)數(shù),如果讀取前以到輸入流的末尾返回-1 int read(byte buffer, int off, int len) throws IOException /關閉流釋放內存資源 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,繼承自OutputSteam的流是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);下圖中深色為節(jié)點流,淺色為處理流。,Page 11,OutputStream的基本方法,/向輸出流中寫入一個字節(jié)數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的低8位 void write(int b) throws IOException /將一個字節(jié)類型的數(shù)組中的數(shù)據(jù)寫入輸出流 void write
6、(byte b) throws IOException /將一個字節(jié)類型的數(shù)組中的從指定位置(off)開始的 /len個字節(jié)寫入到輸出流 void write(byte b, int off, int len) throws IOException /關閉流釋放內存資源 void close() throws IOException /將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地 void flush() throws IOException,良好的編程習慣,先flush(),再close(),Page 12,Reader,繼承自Reader的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bi
7、t);下圖中深色為節(jié)點流,淺色的為處理流。,Page 13,Reader 的基本方法,/讀取一個字符并以整數(shù)的形式返回(0255), /如果返回-1已到輸入流的末尾。 int read() throws IOException /讀取一系列字符并存儲到一個數(shù)組buffer, /返回實際讀取的字符數(shù),如果讀取前已到輸入流的末尾返回-1 int read(char cbuf) throws IOException /讀取length個字符 /并存儲到一個數(shù)組buffer,從off位置開始存,最多讀取len /返回實際讀取的字符數(shù),如果讀取前以到輸入流的末尾返回-1 int read(char cb
8、uf, int off, int len) throws IOException /關閉流釋放內存資源 void close() throws IOException,Page 14,Writer,繼承自Writer的流都是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bit);下圖中深色為節(jié)點流,淺色為處理流。,Page 15,Writer 的基本方法,/向輸出流中寫入一個字符數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的低16位 void write(int c) throws IOException /將一個字符類型的數(shù)組中的數(shù)據(jù)寫入輸出流, void write(char cbuf) throws IOE
9、xception /將一個字符類型的數(shù)組中的從指定位置(offset)開始的 /length個字符寫入到輸出流 void write(char cbuf, int offset, int length) throws IOException /將一個字符串中的字符寫入到輸出流 void write(String string) throws IOException /將一個字符串從offset開始的length個字符寫入到輸出流 void write(String string, int offset, int length) throws IOException /關閉流釋放內存資源 voi
10、d close() throws IOException /將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地 void flush() throws IOException,Page 16,節(jié)點流,各種類型的字符和字節(jié)流類是:,Page 17,訪問文件,FileInputStream和FileOutputStream分別繼承自InputStream和OutputStream用于向文件中輸入和輸出字節(jié)。 FileInputStream和FileOutputStream的常用構造方法: 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ù)讀寫方法。 注意: 在實例化FileInputStream和FileOutputSteam流時要用trycatch語句以處理其可能拋出的FileNotFoundException。 在讀寫數(shù)據(jù)時也要用trycatch語句以處理可能拋出的 IOException。 FileNotFoundException是IOException的子類,例:TestFileInputStream.java / TestFileOutputStream.java,Page 18,訪問文件,FileReader 和 FileWriter 分別繼承自Reader和Writer,F(xiàn)ileInpu
13、tSteam與FileOutputStream類似,所不同的時FileReader和FileWriter向文件輸入和輸出的數(shù)據(jù)單位為字符。 FileReader和FileWriter的常用構造方法:,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,緩沖流,緩沖流要套接在相應的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖功能,提高了讀寫的效率同時增加了一些新
15、的方法。 J2SDK提供四種緩沖流,其常用的構造方法: 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方法用于寫入一行分隔符 對于輸出的緩沖流,寫出的數(shù)據(jù)會先存在內存的緩存,使用flush方法會將內存中數(shù)據(jù)立刻寫出,TestBufferStream1/2.java,Page 22,轉化流,InputStreamReader 和 OutputStreamWriter /用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉化 InputStreamReader需要和
17、InputStream“套接” OutputStreamWriter需要和OutputStream“套接” 轉化流在構造時可以指定其編碼集合 InputStream isr = new InputStreamReader(System.in,”ISO8859_1”),TestTransForm1/2.java,Page 23,數(shù)據(jù)流,DataInputStream 和DataOutputStream 分別繼承自InputStream和OutputStream,它屬于處理流,分別需要“套接”在InputStream和OutputStream類型的節(jié)點流上 DataInputStream 和Dat
18、aOutputStream提供了可以存取與機器無關的Java原始數(shù)據(jù)類型的方法 DataInputStream 和DataOutputStream的構造方法為: DataInputStream (InputStream in) DataOutputStream(OutputStream out),TestDataStream.java,Page 24,Print流,PrintStream和 PrintWriter都是輸出流,分別針對字符和字節(jié) PrintStream和 PrintWriter提供了重載的print方法 Println方法用于多種數(shù)據(jù)類型的輸出 PrintStream和 Prin
19、tWriter的輸出操作不會拋出異常,用戶通過檢測錯誤狀態(tài)獲取錯誤信息 PrintStream和 PrintWriter有自動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)建一個輸入流對象,可以從指定的輸入流對象in中讀取對象,讀取的對象必須是序列化的 public ObjectOutputStream(outputStream out) throws IOException /創(chuàng)建一個輸出流對象,可以把一個序列化對象寫入到指定的輸出流out中 對象的序列化 所謂序列化就是把對象把對象轉換為一系列的字節(jié)來記錄
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球石膏用有機硅防水劑行業(yè)調研及趨勢分析報告
- 2025年全球及中國傳送帶位置開關行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 二零二五年度教室租賃合同(含桌椅設備)3篇
- 2025年度融資公司體育產(chǎn)業(yè)融資合作協(xié)議范本3篇
- 2025年度銷售業(yè)務員勞動合同(含客戶關系維護責任)2篇
- 二零二五年度高端房地產(chǎn)首付分期支付方案合同模板3篇
- 二零二五年度特色飲品店經(jīng)營承包合同2篇
- 重力壩施工方案
- 2020-2025年中國自動晾衣架行業(yè)市場調查研究及投資前景預測報告
- 二零二五年旅游項目擔保借款合同示例3篇
- 一年級數(shù)學(上)計算題專項練習集錦
- 消防安全應急預案下載
- 《北航空氣動力學》課件
- 附件:財政業(yè)務基礎數(shù)據(jù)規(guī)范(3.0版)
- 電商公司售后服務管理制度
- 火災應急處理課件
- 創(chuàng)新者的逆襲3:新質生產(chǎn)力的十八堂案例課-記錄
- 2024年河南省公務員考試《行測》真題及答案解析
- 2022-2024北京初三二模英語匯編:話題作文
- 人教版八年級英語上冊Unit1-10完形填空閱讀理解專項訓練
- 2024年湖北省武漢市中考英語真題(含解析)
評論
0/150
提交評論