根據(jù)java類之間的關(guān)系逐哈,整理出java常用IO流之間的UML類圖
初學(xué)UML秽晚,如果有錯(cuò)的話請(qǐng)諒解罢杉,這里面只寫了關(guān)鍵的方法馆衔。
字節(jié)輸入流:InputStream類為所有自己輸入流的父類
主要方法有三個(gè):
int read()
從流里面讀出一個(gè)字節(jié)井誉。不推薦使用
int read(byte[] b)
將數(shù)據(jù)讀入到字節(jié)數(shù)組中蕉扮,并返回所讀的字節(jié)數(shù)
inte read(byte[] b,int off,int len)
off 從哪里開始讀
len讀取多少
將輸入流中最多l(xiāng)en個(gè)數(shù)據(jù)字節(jié)讀入字節(jié)數(shù)組
其他方法:
void close()
關(guān)閉流資源
int available()
返回不受阻塞地從此輸入流讀取的字節(jié)數(shù)
long skip(long n)
跳過和放棄此輸入流中的n個(gè)數(shù)據(jù)字節(jié),該方法有可能失效
boolean markSupported()
測(cè)試此輸入流是否支持mark和reset方法
void mark(int n)
在此輸入流中標(biāo)記當(dāng)前的位置
void reset()
將此流重新定位到對(duì)此輸入流最后調(diào)用mark方法時(shí)的位置颗圣。
字節(jié)輸出流:OutputStream是所有字節(jié)輸出流的父類慢显。
三個(gè)基本的write()方法:
void write(int n)
將指定的字節(jié)寫入此輸出流爪模。
void write(byte[] b)
將b.length個(gè)字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流
void write(byte[] b,int off,int len)
將指定字節(jié)數(shù)組中從偏移量off開始的len個(gè)字節(jié)寫入此輸出流
其他方法:
void close()
關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源
void flush()
刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)
文件輸入輸出流:FileInputStream和FileOutputStream,要構(gòu)造一個(gè)FileInputStream,所關(guān)聯(lián)的文件必須存在并且可讀荚藻。
FileInputStream fis = new FileInputStream("demo.java");
要構(gòu)造一個(gè)FileOutputStream,而輸出文件已經(jīng)存在屋灌,則它將被覆蓋
FileOutputStream fos = new FileInputStream("results.dat");
想要以追加的方式寫,則需要一個(gè)額外的參數(shù)应狱,如:
FileOutputStream outfile = new FileOutputStream("results.dat",true);
字符流:Reader和Writer所有字符流的父類型共郭。
java技術(shù)使用Unicode來表示字符串和字符,而且提供16位版本的流疾呻,以便用類似的方法處理字符除嘹。如果構(gòu)造了一個(gè)連接到流的Reader和Writer,轉(zhuǎn)換規(guī)則會(huì)在使用缺省平臺(tái)所定義的字節(jié)編碼和Unicode之間切換岸蜗。
橋梁流:InputStreamReader和OutputStreamWriter(字節(jié)流轉(zhuǎn)換成字符流的轉(zhuǎn)換器)
這兩個(gè)類不是用于直接輸入輸出的尉咕,他是將字節(jié)流轉(zhuǎn)換成字符流的橋轉(zhuǎn)換器,并可以指定編解碼方式璃岳。
逐行讀寫流:BufferedReader/BufferedWriter
以上兩個(gè)都是過濾流年缎,需要用其他的節(jié)點(diǎn)流來作為參數(shù)的構(gòu)造對(duì)象。
BufferedReader的方法:readLine():String铃慷,當(dāng)他的返回值是null時(shí)单芜,就表示讀取完畢了。要注意犁柜,在寫入時(shí)要注意寫換行符洲鸠,否則會(huì)出現(xiàn)阻塞。
BufferedWriter的方法:newLine(),這個(gè)方法會(huì)寫出一個(gè)換行符馋缅。
管道流:線程交互的時(shí)候使用
PipedInputStream/PipedOutputStream
傳送輸出流可以連接到傳送輸入流扒腕,以創(chuàng)建通信管道。傳送輸出流是管道的發(fā)送端萤悴。通常瘾腰,數(shù)據(jù)由某個(gè)線程寫入PipedOutputStream對(duì)象,并由其他線程從連接的PipedInputStream讀取稚疹。