1. 程式人生 > >史上最全IO框架五(緩衝流)

史上最全IO框架五(緩衝流)

IO之緩衝流
課程大綱
一、 緩衝流概述
1、 首先要明確一個概念:對檔案或者其他目標頻繁的操作,效率低,效能差。
2、 使用緩衝流的好處是能夠更高效的讀寫資訊,原理是現將資料緩衝起來,然後一起寫入或者讀取出來。
二、 BufferedInputStream
1、 public class BufferedInputStream extends FIlterInputStream
2、 BufferedInputStream 為另一個輸入流新增一些功能,再建立BufferedInputStream時,會建立一個內部緩衝區陣列,用於緩衝資料。
三、 BufferedOutputStream
1、 public class BufferedOutputStream extends FIlterOutputStream
2、 類實現緩衝的輸出流,通過設定這種輸出流,應用程式就可以將 各個位元組寫入底層輸出流中,而不必針對每次位元組寫入調入底層系統。

四、 BufferedReader
1、 public class BufferedReader exrends Reader
2、 從字元輸入流中讀取文字,緩衝各個字元,從而實現字元,陣列和行的高效讀取。
3、 可以指定緩衝區的大小,或者可使用預設的大小,多數情況下預設值就足夠大了。
五、 BufferedWriter
1、 public class BufferedReader extends writer
2、 將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元,陣列和字串的高效寫入,可以指定緩衝區的大小,或者可使用預設的大小,多數情況下預設值就足夠大了。

位元組緩衝流程式碼

package com.itheima.filedemo;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;

/**
* 位元組緩衝流(緩衝流屬於高效流)
* @author Administrator
*
*/
public class ZiJieBufferedStreamDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    write();
    read();
}

/**
 * 使用位元組緩衝流進行寫操作
 */
public static void write(){

    try {
        //建立一個位元組輸出流物件
        OutputStream out = new FileOutputStream("E:\\1.txt");
        //根據位元組輸出流物件構造一個位元組緩衝流
        BufferedOutputStream bos = new BufferedOutputStream(out);
        String info = "山不再高,有仙則名,學Java沒威哥不行!";
        bos.write(info.getBytes());
        //一定記得重新整理
        bos.flush();
        out.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

/**
 * 使用位元組緩衝流進行讀操作
 */
public static void read(){

    try {
        //構造一個位元組輸入流物件
        InputStream in = new FileInputStream("E:\\1.txt");
        //根據位元組輸入流構造一個位元組緩衝流
        BufferedInputStream bis = new BufferedInputStream(in);
        //根據位元組緩衝流轉換成字元流(轉換流)
        Reader reader = new InputStreamReader(bis);
        char[] cs = new char[512];
        int len = -1;
        StringBuilder sb = new StringBuilder();
        while ((len = reader.read(cs)) != -1) {
            sb.append(new String(cs, 0, len));

        }
        reader.close();
        bis.close();
        in.close();
        System.out.println(sb);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

字元緩衝流程式碼

package com.itheima.filedemo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

/**
* 字元緩衝流
* @author Administrator
*
*/
public class CharBufferedStreamDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    //write();
    read();
}

/**
 * 使用字元緩衝流實現 寫檔案
 */
public static void write(){

    try {
        //構造一個字元輸出流物件
        Writer writer = new FileWriter("E:\\1.txt");
        //根據字元輸出流物件構造一個字元輸出緩衝流物件
        BufferedWriter bw = new BufferedWriter(writer);
        String info = "小白,你怎麼了?";
        bw.write(info);
        bw.flush();
        bw.close();
        writer.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

/**
 * 
 */
public static void read(){
    try {
        //建立一個字元輸入流物件
        Reader reader = new FileReader("E:\\1.txt");
        //根據字元輸入流構造一個字元輸入緩衝流
        BufferedReader br = new BufferedReader(reader);
        char[] cs = new char[512];
        int len = -1;
        StringBuffer sb = new StringBuffer();
        while ((len = br.read(cs))!=-1) {
            sb.append(new String(cs,0,len));

        }
        br.close();
        reader.close();
        //輸出
        System.out.println(sb);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}