1. 程式人生 > >JAVA的IO流之緩衝流

JAVA的IO流之緩衝流

JAVA緩衝流本身不具IO功能,只是在別的流上加上緩衝提高效率,像是為別的流裝上一種包裝。當對檔案或其他目標頻繁讀寫或操作效率低,效能差。這時使用緩衝流能夠更高效的讀寫資訊。因為緩衝流先將資料快取起來,然後一起寫入或讀取出來。所以說,緩衝流還是很重要的,在IO操作時記得加上緩衝流提升效能。

緩衝流分為位元組和字元緩衝流

位元組緩衝流為: BufferedInputStream—位元組輸入緩衝流 BufferedOutputStream—位元組輸出緩衝流 字元緩衝流為: BufferedReader—字元輸入緩衝流 BufferedWriter—字元輸出緩衝流 下面主要介紹這四種緩衝流的使用。

一.位元組緩衝流

1.BufferedOutputStream—位元組輸出緩衝流 BufferedOutputStream類實現緩衝的輸出了,通過設定這種輸出流,應用程式就可以將各個位元組寫入底層輸出流中,而不必每一個位元組寫入都呼叫底層系統。 示例程式碼:

public static void main(String[] args) {         
      try {  
    //建立位元組輸出流例項  
    OutputStream out=new FileOutputStream("L:\\test.txt");  
    //根據位元組輸出流構建位元組緩衝流  
    BufferedOutputStream buf=new BufferedOutputStream(out);  
      
    String data="好好學習,天天向上";  
    buf.write(data.getBytes());//寫入緩衝區  
    buf.flush();//重新整理緩衝區,即把內容寫入  
    //關閉流  
    buf.close();//關閉緩衝流時,也會重新整理一次緩衝區  
    out.close();  
      
} catch (IOException e) {  
    e.printStackTrace();  
}  
    
   }   

2.BufferedInputStream—位元組輸入緩衝流 BufferedInputStream為別的輸入流新增緩衝功能,在建立BufferedInputStream時會建立一個內部緩衝陣列,用於緩衝資料,提高效能。

示例程式碼:

public static void main(String[] args) {         
       try {  
        //建立位元組輸入流例項  
        InputStream in=new FileInputStream("L:\\test.txt");  
        //根據位元組輸入流構建位元組緩衝流  
        BufferedInputStream buf=new BufferedInputStream(in);  
          
        byte[]bytes=new byte[1024];  
        //資料讀取  
        int len=-1;  
        StringBuffer  sb=new StringBuffer();  
        while((len=buf.read(bytes))!=-1)  
        {  
            sb.append(new String(bytes,0,len));  
        }  
        System.out.println("內容為:"+sb);  
        //關閉流  
        buf.close();  
        in.close();  
          
          
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
     
    }   

二.字元緩衝流

1.BufferedWriter—字元輸出緩衝流 將文字寫入字元輸出流,緩衝各個字元,從而提供高效的寫入。可以指定緩衝區的大小,一般情況下,預設的緩衝區大小就足夠了。

示例程式碼:

public static void main(String[] args) {  
      
    try {  
        Writer w=new FileWriter("L:\\test.txt");  
        //根據字元輸出流建立字元緩衝流  
        BufferedWriter buf=new BufferedWriter(w);  
        //寫入資料  
        buf.write("只要功夫深鐵杵磨成針");  
        //重新整理流  
        buf.flush();  
        //關閉流  
        buf.close();  
        w.close();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
      
    
   }   

2.BufferedReader—字元輸入緩衝流 從字元輸入流中讀取資訊,緩衝各個字元,從而實現高效讀取。可以指定緩衝區的大小,一般情況下,預設的緩衝區大小就足夠了。預設大小為8192.

示例程式碼:

public static void main(String[] args) {  
          
        try {  
            Reader r=new FileReader("L:\\test.txt");  
            //根據字元輸入流建立字元緩衝流  
            BufferedReader buf=new BufferedReader(r);  
              
            char [] data=new char[512];  
            //資料讀取  
            int len=-1;  
            StringBuilder sb=new StringBuilder();  
            while((len=buf.read(data))!=-1)  
            {  
                sb.append(new String(data,0,len));  
            }  
            System.out.println("內容是: "+sb);  
            //關閉流  
            buf.close();  
            r.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
     
    }