6.3(java學習筆記)緩衝流
一、緩衝流
使用緩衝流後的輸入輸出流會先儲存到緩衝區,等緩衝區滿後一次性將緩衝區中的資料寫入或取出。
避免程式頻繁的和檔案直接操作,這樣操作有利於提高讀寫效率。
緩衝流是構建在輸入輸出流之上的,可以理解為是對基本輸入輸出流的增強和擴充套件,但其根本是建立在輸入輸出流之上的。
1.位元組緩衝流
1.1位元組緩衝流類
BufferInputStream
BufferOutputStream
1.2.構造方法:
傳遞引數為輸入、輸出流物件。
BufferedInputStream(InputStream in)//構造方法,建立一個緩衝流,儲存其引數(輸入流),供後續使用
BufferedInputStream(InputStream in, int size)//建立一個緩衝流,size為設定緩衝區大小
BufferedOutputStream(OutputStream out)//建立輸出緩衝流
BufferedOutputStream(OutputStream out, int size)//size為緩衝區大小
1.3.例子
給輸入輸出流加上緩衝流後,其基本功能和方法並沒有改變,只是改變了讀寫所採取的策略,基本方法和操作方式沒有發生變化。
importjava.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.Flushable; import java.io.IOException;import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Test { public static void main(String[] args){ String pathW = "F:\\依風\\Desktop\\writer.txt"; String pathR = "F:\\依風\\Desktop\\reader.txt";//此處的reader.txt中要有資料 File fr = new File(pathR); File fw = new File(pathW); InputStream r = null; OutputStream w = null; InputStream bufferR = null; OutputStream bufferW = null; try { int c = 0; r = new FileInputStream(fr); w = new FileOutputStream(fw); bufferR = new BufferedInputStream(r);//將輸入輸出流加上緩衝 bufferW = new BufferedOutputStream(w); try { while(-1 != (c = bufferR.read())){//讀一個字元 bufferW.write(c); System.out.print((char)c); } bufferW.flush();//將緩衝區剩餘資料寫入 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { bufferW.close();//關閉資源 bufferR.close(); r.close(); w.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
執行結果:
BufferedStream
2.字元緩衝流
2.1字元緩衝流類
BufferedWriter
BufferedReader
2.2構造方法
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)
建立字元緩衝流,sz為指定緩衝區大小。
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
2.3新增方法
BufferedWtriter:void newLine()//寫入行分隔符,簡單的說就是加上回車換行
BufferedReader:String readLine()//讀取一行,以字串形式返回讀取內容。如果已到末尾返回null
有一點需要注意,這裡的新增方法在它們的父類(Wtriter,Reader)中並沒有,所以需要使用這些方法時不能發生多型。
3.4例子
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.Flushable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Test { public static void main(String[] args){ String pathW = "F:\\依風\\Desktop\\writer.txt"; String pathR = "F:\\依風\\Desktop\\reader.txt";//該檔案必須已有資料 /*此時該檔案中的資料: *BufferedStream *BufferReader *BufferWriter * */ File fr = new File(pathR); File fw = new File(pathW); Reader r = null; Writer w = null; BufferedReader bufferR = null;//此處使用的BufferedReader、BufferedWtriter中獨有的方法 BufferedWriter bufferW = null;//故不能發生多型,所有不能使用Reader或Writer try { String str; r = new FileReader(fr); w = new FileWriter(fw); bufferR = new BufferedReader(r);//將輸入輸出流加上緩衝 bufferW = new BufferedWriter(w); try { while(null != (str = bufferR.readLine())){//讀一行 bufferW.write(str);//將讀取的字串寫入 bufferW.newLine();//寫入換行分隔符,即回車 System.out.println(str);//輸出讀取和寫入的資料 } bufferW.flush();//將緩衝區剩餘資料寫入 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { bufferW.close();//關閉資源 bufferR.close(); r.close(); w.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
執行結果: BufferedStream BufferReader BufferWriter