1. 程式人生 > >6.3(java學習筆記)緩衝流

6.3(java學習筆記)緩衝流

一、緩衝流

  使用緩衝流後的輸入輸出流會先儲存到緩衝區,等緩衝區滿後一次性將緩衝區中的資料寫入或取出。

  避免程式頻繁的和檔案直接操作,這樣操作有利於提高讀寫效率。

  緩衝流是構建在輸入輸出流之上的,可以理解為是對基本輸入輸出流的增強和擴充套件,但其根本是建立在輸入輸出流之上的。

 

  1.位元組緩衝流

 

    1.1位元組緩衝流類

      BufferInputStream

      BufferOutputStream

 

    1.2.構造方法:

      傳遞引數為輸入、輸出流物件。

      BufferedInputStream(InputStream in)//構造方法,建立一個緩衝流,儲存其引數(輸入流),供後續使用

      BufferedInputStream(InputStream in, int size)//建立一個緩衝流,size為設定緩衝區大小

    

      BufferedOutputStream(OutputStream out)//建立輸出緩衝流

      BufferedOutputStream(OutputStream out, int size)//size為緩衝區大小

 

    1.3.例子

      給輸入輸出流加上緩衝流後,其基本功能和方法並沒有改變,只是改變了讀寫所採取的策略,基本方法和操作方式沒有發生變化。

    

import
java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.Flushable; import java.io.IOException;
import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Test { public static void main(String[] args){ String pathW = "F:\\依風\\Desktop\\writer.txt"; String pathR = "F:\\依風\\Desktop\\reader.txt";//此處的reader.txt中要有資料 File fr = new File(pathR); File fw = new File(pathW); InputStream r = null; OutputStream w = null; InputStream bufferR = null; OutputStream bufferW = null; try { int c = 0; r = new FileInputStream(fr); w = new FileOutputStream(fw); bufferR = new BufferedInputStream(r);//將輸入輸出流加上緩衝 bufferW = new BufferedOutputStream(w); try { while(-1 != (c = bufferR.read())){//讀一個字元 bufferW.write(c); System.out.print((char)c); } bufferW.flush();//將緩衝區剩餘資料寫入 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { bufferW.close();//關閉資源 bufferR.close(); r.close(); w.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
執行結果:
BufferedStream

 

  2.字元緩衝流

 

    2.1字元緩衝流類

      BufferedWriter

        BufferedReader

    2.2構造方法

      BufferedWriter(Writer out)

      BufferedWriter(Writer out, int sz)

      建立字元緩衝流,sz為指定緩衝區大小。

       

      BufferedReader(Reader in)

      BufferedReader(Reader in, int sz)

 

    2.3新增方法

      BufferedWtriter:void newLine()//寫入行分隔符,簡單的說就是加上回車換行

      BufferedReader:String readLine()//讀取一行,以字串形式返回讀取內容。如果已到末尾返回null

      有一點需要注意,這裡的新增方法在它們的父類(Wtriter,Reader)中並沒有,所以需要使用這些方法時不能發生多型。

    

    3.4例子

      

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Flushable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

public class Test {
    public static void main(String[] args){
        String pathW = "F:\\依風\\Desktop\\writer.txt";
        String pathR = "F:\\依風\\Desktop\\reader.txt";//該檔案必須已有資料
        /*此時該檔案中的資料:
         *BufferedStream
         *BufferReader
         *BufferWriter
         * 
         */
        
        File fr = new File(pathR);
        File fw = new File(pathW);
        Reader r = null;
        Writer w = null;
        BufferedReader bufferR = null;//此處使用的BufferedReader、BufferedWtriter中獨有的方法
        BufferedWriter bufferW = null;//故不能發生多型,所有不能使用Reader或Writer
        try {
            String str;
            r = new FileReader(fr);
            w = new FileWriter(fw);
            bufferR = new BufferedReader(r);//將輸入輸出流加上緩衝
            bufferW = new BufferedWriter(w);
            try {
                while(null != (str = bufferR.readLine())){//讀一行
                    bufferW.write(str);//將讀取的字串寫入
                    bufferW.newLine();//寫入換行分隔符,即回車
                    System.out.println(str);//輸出讀取和寫入的資料
                }
                bufferW.flush();//將緩衝區剩餘資料寫入
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                bufferW.close();//關閉資源
                bufferR.close();
                r.close();
                w.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
}
執行結果:
BufferedStream
BufferReader
BufferWriter