天天看點

Java過濾器流之BufferedInputStream與BufferedOutputStream3. BufferedOutputStream示例

1. 簡介

過濾器流就是串聯在流上,執行一些額外操作的東西。其中很重要,很常用的就是緩沖流BufferedInputStream與BufferedOutputStream。

緩沖流的作用簡單而直接而有效,每次讀寫不是隻有幾個位元組就開始從磁盤等資料源讀寫,而是先放到記憶體的緩沖區(其實就是類似于byte[]類型的記憶體變量中),等緩沖區滿了(具體緩沖區多大可以自己定義)再一次性讀寫資料源。

因為記憶體讀寫速度遠遠快于磁盤等其他媒體讀寫速度,是以緩存的存在是有意義的。

2. BufferedInputStream示例

工具類,儲存定義的常量及方法(暫時隻有常量)

//工具類
package com.maoge.stream;
import java.io.File;
public class StreamUtils {
    //用于定義每次讀取的長度
    public static final int BUFFER_LENGTH=512;
    //檔案對象
    public static File FILE_FOR_READ;
    public static File FILE_FOR_WRITE;
    static{
        FILE_FOR_READ=new File("C:\\test.txt"); 
        FILE_FOR_WRITE=new File("C:\\result.txt"); 
    }
}
      

讀取示例,一定要注意檔案編碼

//使用緩沖流讀入
    public static void bufferedRead(){
        InputStream in=null;
        try {
            in = new FileInputStream(StreamUtils.FILE_FOR_READ);
            //使用緩沖流串聯,因為BufferedInputStream也是InputStream子類
            in=new BufferedInputStream(in);
            //儲存讀出的内容
            StringBuilder sb=new StringBuilder();
            //定義緩沖區
            byte[] buffer=new byte[StreamUtils.BUFFER_LENGTH];
            //實際讀到的字元長度
            int bytesRead=0;
            while((bytesRead=in.read(buffer))!=-1){
                //注意編碼,文本檔案要另存為UTF-8格式,然後此處也寫明按UTF-8讀取。
                sb.append(new String(buffer,0,bytesRead,"UTF-8"));
            }
            System.out.println(sb.toString());
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }finally{
            try {
                in.close();
            } catch (IOException ioEx) {
                System.out.println(ioEx.toString());
            }
        }
    }
      

3. BufferedOutputStream示例

注意.flush()是強制将緩沖區内容輸出到流,因為有時候緩沖區挺大,而且還沒滿,是不會自動輸出到流的,是以有時候就會得不到程式員員設想的結果,是以為了保險,在確定得到結果時先.flush()

public static void bufferedWrite(){
        OutputStream out=null;
        try {
            out = new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
            out=new BufferedOutputStream(out);
            String content="這就是要寫入的内容,我要吟詩一首:今天我是真高興!";
            out.write(content.getBytes(), 0, content.getBytes().length);
            //重新整理!
            out.flush();
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }finally{
            try {
                out.close();
            } catch (IOException ioEx) {
                System.out.println(ioEx.toString());
            }
        }
    }