緩衝流(處理流/過濾流)
阿新 • • 發佈:2018-11-24
1、四種抽象類之上加Buffered就是緩衝流,給資料讀寫提供了緩衝能力,通過緩衝流,讀取的效率會更高,套接在其餘的節點流或者緩衝流之上。
1、以位元組為單位進行讀寫
例項1:TestBufferStream1
—功能:使用BufferedInputStream從檔案HelloWorld.java中讀取位元組。
import java.io.*; /* * 功能:使用BufferedInputStream從檔案HelloWorld.java中讀取位元組。 * 問題:仍然不能顯示中文,因為是以位元組流的形式讀取資料。 * */ public class TestBufferStream1 { public static void main(String[] args) { BufferedInputStream bis=null; try { /*FileInputStream fis=new FileInputStream("HelloWorld.java"); bis=new BufferedInputStream(fis);*/ bis=new BufferedInputStream(new FileInputStream("HelloWorld.java")); int c=0; for(int i=0;(c=bis.read())!=-1;i++) { System.out.print((char)c); } } catch(FileNotFoundException e) { System.out.println("檔案讀取錯誤"); System.exit(-1); } catch(IOException e) { e.printStackTrace(); } finally { try { bis.close(); } catch(IOException e) { e.printStackTrace(); } } } }
結果是
雖然是提供了緩衝功能,但是還是以位元組為單位讀,而且每次都讀一個位元組過來,所以如果是中文的話,會出現問題。
2、以字元為單位進行讀寫
例項2:TestBufferReader
import java.io.*; /*功能:往test.txt中寫入100行字元,然後從test.txt讀出寫入的資料,並列印到控制檯*/ public class TestBufferReader { public static void main(String[] args) { BufferedReader br=null; try { BufferedWriter bw=new BufferedWriter(new FileWriter("test.txt"));//向test.txt中寫內容 br=new BufferedReader(new FileReader("test.txt"));//讀test.txt中的內容 String s=null; for(int i=0;i<=100;i++) { s=String.valueOf(i);//把int型別的東西換成字串型別的東西 bw.write(s);//寫字串 bw.newLine();//新的一行,和回車一樣 } bw.flush();//將緩衝中的內容清空並且寫入到檔案 while((s=br.readLine())!=null) /* * readLine():常用方法,一次可以讀一行 * 一共寫了100行字串 * 每次讀一行回來 * 讀到結尾就是null了,讀到結尾之後就打印出來 **/ { System.out.println(s); } } catch(FileNotFoundException e) { System.out.println("檔案讀取錯誤"); System.exit(-1); } catch(IOException e) { e.printStackTrace(); } /*catch(FileNotFoundException e) { System.out.println("檔案讀取錯誤"); System.exit(-1); }*/ finally { try { br.close(); } catch(IOException e) { e.printStackTrace(); } } } }
- 先通過BufferedWriter寫100行字串
- 然後,通過BufferReader讀100行字串
- 將其顯示到螢幕上
原本沒有test檔案,但是,當執行結束之後自己生成了這個文件,而且內容是
- 在這個測試中,用到了兩個類BufferedWriter和BufferedReader,這兩個類都是以字元為單位進行讀寫,而且帶緩衝,效率比較高
- 同時,在BufferedReader類中有readLine()方法,非常好用
- 如果catch(FileNotFoundException e)在註釋的地方是錯誤的,因為這兩個異常類是父類與子類的關係,父類異常不能寫在子類異常前面