1. 程式人生 > >Java基礎IO類之緩衝流

Java基礎IO類之緩衝流

首先要明確一個概念:

  對檔案或其他目標頻繁的讀寫操作,效率低,效能差。

  使用緩衝流的好處是:能夠高效的讀寫資訊,原理是先將資料先緩衝起來,然後一起寫入或者讀取出來。

對於位元組:

BufferedInputStream:為另一個輸入流新增一些功能,在建立BufferedInputStream時,會建立一個內部緩衝區陣列,用於緩衝資料。

BufferedOutputStream:通過設定這種輸出流,應用程式就可以將各個位元組寫入底層輸出流中,而不必針對每次位元組寫入呼叫底層系統。

對於字元:

BufferedReader:將字元輸入流中讀取文字,並緩衝各個字元,從而實現字元、陣列、和行的高效讀取。

BufferedWriter:將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元、陣列和字串的高效寫入。

 

程式碼示例:

package IODemo;

import java.io.*;
/*
緩衝的目的:
解決在寫入檔案操作時,頻繁的操作檔案所帶來的效能降低的問題
BufferedOutStream 內部預設的緩衝大小是 8Kb,每次寫入儲存到快取中的byte陣列中,當陣列存滿是,會把陣列中的資料寫入檔案
並且快取下標歸零
 */
public class BufferedDemo {

    //使用新語法 會在try裡面幫關掉這個流
    private static void BuffRead2(){
        File file = new File("d:\\test\\t.txt");
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))){

            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = bis.read(bytes))!=-1){
                System.out.println(new String(bytes,0,len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void BuffRead(){
        File file = new File("d:\\test\\t.txt");
        try {
            InputStream in = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(in);
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = bis.read(bytes))!=-1){
                System.out.println(new String(bytes,0,len));
            }
            bis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    private static void BuffWrite(){
        File file = new File("d:\\test\\t.txt");
        try {
            OutputStream out = new FileOutputStream(file);
            //構造一個位元組緩衝流
            BufferedOutputStream  bos = new BufferedOutputStream(out);
            String info = "我是落魄書生";

            bos.write(info.getBytes());
            bos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
  //  BuffWrite();
        BuffRead2();
    }
}

&n