IO流技術(shù):
目的:將數(shù)據(jù)源讀取到目的地
原理:從中搭建管道侧巨,將數(shù)據(jù)源數(shù)據(jù)通過管道輸送給目的地拨拓。
四大抽象類:
輸入流:1.inputstream,2.reader
//實(shí)現(xiàn)類:FileInputStream? ?FileReader
輸出流:3.outputstream,4.writer
//實(shí)現(xiàn)類:FileOutputStream? FileWriter
?文件字節(jié)流:FileInputStream? ??FileOutputStream?
FileInputStream常用方法:
abstract int read( ); ?從此輸入流中讀取下一個(gè)數(shù)據(jù)字節(jié)庆尘。
int read( byte b[ ] ); 從此輸入流中將 byte.length 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中撑教。
int read( byte b[ ], int off, int len ); 從此輸入流中將 len 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中汽馋。
int available( ); 返回下一次對(duì)此輸入流調(diào)用的方法可以不受阻塞地從此輸入流讀攘柰!(或跳過)的估計(jì)剩余字節(jié)數(shù)粱年。
close(
); 關(guān)閉此輸入流并釋放與此流關(guān)聯(lián)的所有系統(tǒng)資源。
FileOutputStream 常用方法:
close() 關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源罚拟。
flush() 刷新此輸出流台诗,并強(qiáng)制將所有已緩沖的輸出字節(jié)寫入該流中。
write(byte[] b) 將 b.length 個(gè)字節(jié)寫入此輸出流赐俗。
write(byte[] b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此輸出流拉队。
write(int b) 將指定 byte 寫入此輸出流
使用字節(jié)流實(shí)現(xiàn)文件復(fù)制:
原理:
復(fù)制的步驟:1.搭建輸入流管道 2.寫入數(shù)據(jù)3.關(guān)閉輸入流管道 4.搭建輸出流管道 5.讀取數(shù)據(jù)??6.關(guān)閉輸出流管道
代碼:
結(jié)果:
?文件字符流:同文件字節(jié)流方法,只是字節(jié)流不能很好的處理Unicode字符阻逮,經(jīng)常會(huì)出現(xiàn)“亂碼”現(xiàn)象粱快。字符流則可以處理漢子等字符,不會(huì)出現(xiàn)亂碼叔扼。
緩沖字節(jié)流:
作用:提高訪問的效率事哭。
原理:讀取數(shù)據(jù)時(shí),數(shù)據(jù)按塊讀入緩沖區(qū)币励,其后的讀操作則直接訪問緩沖區(qū)慷蠕;寫入數(shù)據(jù)時(shí),首先寫入緩沖區(qū)食呻,當(dāng)緩沖區(qū)滿時(shí)流炕,其中的數(shù)據(jù)寫入所連接的輸出流澎现。寫入時(shí)直接訪問緩沖區(qū)。
代碼:
結(jié)果通字節(jié)流復(fù)制每辟。
?轉(zhuǎn)換流:
用來實(shí)現(xiàn)將字節(jié)流轉(zhuǎn)化成字符流剑辫。
? inputstream ------>? ? InputStreamReader? ----->rerder
?outputstream----> OutputStreamWriter----->writer
打印流:PrintStream? 與PrintWriter
一:PrintStream
PrintStream提供了一系列的print()和println(),可以實(shí)現(xiàn)將基本數(shù)據(jù)類型格式化成字符串輸出渠欺。對(duì)象類型將先調(diào)用toString()妹蔽,然后輸出該方法返回的字符串
[if !supportLists]2)???? [endif]System.out就是PrintStream的一個(gè)實(shí)例,代表顯示器
[if !supportLists]3)???? [endif]System.err 也是PrintStream的一個(gè)實(shí)例挠将,代表顯示器
[if !supportLists]4)???? [endif]PrintStream的輸出功能非常強(qiáng)大胳岂,通常需要輸出文本內(nèi)容,都可以將輸出流包裝成PrintStream后進(jìn)行輸出
[if !supportLists]5)???? [endif]PrintStream的方法都不拋出IOException
二?PrintWriter:
[if !supportLists]1)???? [endif]PrintStream的對(duì)應(yīng)字符流舔稀,功能相同乳丰,方法對(duì)應(yīng)。
[if !supportLists]2)???? [endif]PrintWriter的方法也不拋出IOException
[if !supportLists]3)???? [endif]復(fù)制文件時(shí)可以使用PrintWriter代替BufferedWriter完成内贮,更簡(jiǎn)單
PrintStream? 與PrintWriter區(qū)別:
PrintStream不用刷新和關(guān)閉产园,PrintWriter必須刷洗和關(guān)閉。
數(shù)據(jù)流:
[if !supportLists]1)???? [endif]提供了可以存取所有Java基礎(chǔ)類型數(shù)據(jù)(如:int夜郁,double 等)和String的方法什燕。
[if !supportLists]2)???? [endif]處理流,只針對(duì)字節(jié)流竞端,二進(jìn)制文件
[if !supportLists]3)???? [endif]輸入流鏈和輸出流鏈
[if !supportLists]4)???? [endif][if !vml][endif]注意:只要關(guān)閉上層流即可
代碼:
結(jié)果: