處理流/包裝流(相對於節點流更高級):
1. 隱藏了底層的節點流的差異,並對外提供了更方便的輸入/輸出功能,讓我們之關心高級流操作。
2. 使用處理包裝流包裝了節點流程序直接操作處理流,讓節點流與底層的設備做IO操作。
3. 只需要關閉處理流即可
包裝流如何分區:寫代碼的時候,發現創建對象的時候,需要傳遞另一個流對象。new 包裝流(流對象);
什么是緩沖流:
是一個包裝流,目的起緩存作用。
BufferedInputStream:
BufferedOutputStream:
BufferedReader:
BufferedWreiter:
緩沖流的目的:
操作流的時候,習慣定義一個byte/char數組
int read();每次都從磁盤文件中讀取一個字節,直接操作磁盤文件性能極低。
解決方案:定義一個數組作為緩沖區
byte[] buffer = new byte[1024]; 該數組其實就是一個緩沖區。
一次性從磁盤文件中讀取1024個字節,如此以來,操作磁盤文件的次數少了,性能就得以提升。
SUN公司提供了默認緩存區大小是8192(1024*8),我們一般不用修改大小。
第一次讀取:就把磁盤文件中的8192個字節讀取到內存中,我們從內存中讀取到程序中。
輸出時每次把數據先寫出到內存緩沖區中,當內存緩沖區大小滿了8192個字節,此刻才把緩沖區的數據寫出給磁盤文件。
字節緩沖流(BufferedInputStream,BufferedOutputStream)
1 public static void main(String[] args) throws Exception { 2 //字節緩沖輸出流 3 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("stream.txt",true));//true表示可追加 4 bos.write("hello word".getBytes()); 5 bos.close(); 6 7 //字節緩沖輸入流 8 BufferedInputStream bin = new BufferedInputStream(new FileInputStream("stream.txt")); 9 byte[] buffer = new byte[1024]; 10 int len = -1; 11 while((len = bin.read(buffer)) !=-1){ 12 System.out.println(new String(buffer,0,len)); 13 } 14 bin.close();}
BufferedWriter與BufferedReader
public static void main(String[] args) throws IOException { //輸出
BufferedWriter out = new BufferedWriter(new FileWriter("stream.txt",true)); out.write("鋤禾日當午"); out.newLine();//換行
out.write("汗滴禾下土"); out.close(); //輸入
BufferedReader in = new BufferedReader(new FileReader("stream.txt")); char[] buffer = new char[1024]; int len = -1; while((len = in.read(buffer)) !=-1){ System.out.println(new String(buffer,0,len)); } in.close(); //按行讀取
BufferedReader in2 = new BufferedReader(new FileReader("stream.txt")); String line = null; while ((line = in2.readLine())!=null){ System.out.println(line); } in2.close(); }
