天天看點

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