Java核心類庫-IO-包裝流概述和緩沖流原理


處理流/包裝流(相對於節點流更高級):

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(); }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM