Java中BufferedInputStream和BufferedOutputStream基本使用詳解

BufferedInputStream的使用


BufferedInputStream:緩衝字節輸入流,是一個高級流(處理流),與其他低級流配合使用。

構造方法

//創建一個 BufferedInputStream 並保存其參數,即輸入流 in,以便將來使用。創建一個內部緩衝區數組並將其存儲在 buf 中,該buf的大小默認爲8192。
public BufferedInputStream(InputStream in);

//創建具有指定緩衝區大小的 BufferedInputStream 並保存其參數,即輸入流 in,以便將來使用。創建一個長度爲 size 的內部緩衝區數組並將其存儲在 buf 中。
public BufferedInputStream(InputStream in,int size);
  • 1
  • 2
  • 3
  • 4
  • 5

從構造方法中我們可以知道BufferedInputStream沒有無參構造方法,它必須傳入一個InputStream(一般是FileInputStream),來一起使用,以提高讀寫效率。


常用的方法

//從該輸入流中讀取一個字節
public int read();

//從此字節輸入流中給定偏移量處開始將各字節讀取到指定的 byte 數組中。
public int read(byte[] b,int off,int len);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

從文件中讀入數據

import java.io.BufferedInputStream;
import java.io.FileInputStream;

/**
 * BufferedInputStream:處理流(高級流),緩衝輸入流
 * @author Administrator
 *
 */
public class BISDemo01 {
    public static void main(String[] args){
        try {
            FileInputStream fis=new FileInputStream("BISDemo.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);
            String content=null;
             //自己定義一個緩衝區
            byte[] buffer=new byte[10240];
            int flag=0;
            while((flag=bis.read(buffer))!=-1){
                content+=new String(buffer, 0, flag);
            }
            System.out.println(content);
            //關閉的時候只需要關閉最外層的流就行了
            bis.close();
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

BufferedOutputStream的使用


BufferedOutputStream:緩衝字節輸出流是一個高級流(處理流),與其他低級流配合使用。

構造方法

//創建一個新的緩衝輸出流,以將數據寫入指定的底層輸出流。
public BufferedOutputStream(OutputStream out);

//創建一個新的緩衝輸出流,以將具有指定緩衝區大小的數據寫入指定的底層輸出流。
public BufferedOutputStream(OutputStream out,int size);
  • 1
  • 2
  • 3
  • 4
  • 5

常用的方法

//向輸出流中輸出一個字節
public void write(int b);

//將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此緩衝的輸出流。
public void write(byte[] b,int off,int len);

//刷新此緩衝的輸出流。這迫使所有緩衝的輸出字節被寫出到底層輸出流中。
public void flush();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

向文件中寫出數據

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

/**
 * BufferedOutputStream:處理流(高級流),緩衝輸出流
 * @author Administrator
 *
 */
public class BOSDemo01 {
    public static void main(String[] args){
        try {
            FileOutputStream fos=new FileOutputStream("BOSDemo.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            String content="我是緩衝輸出流測試數據!";
            bos.write(content.getBytes(),0,content.getBytes().length);
            bos.flush();
            bos.close();
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

使用緩衝輸出流和緩衝輸入流實現文件的複製

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 使用緩衝輸出流和緩衝輸入流實現文件的複製
 * @author Administrator
 *
 */
public class SummaryBISAndBOS {
    public static void main(String[] args){
        /**
         * 1.先將文件中的內容讀入到緩衝輸入流中
         * 2.將輸入流中的數據通過緩衝輸出流寫入到目標文件中
         * 3.關閉輸入流和輸出流
         */
        try {
            long begin=System.currentTimeMillis();
            FileInputStream fis=new FileInputStream("BISDemo.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);

            FileOutputStream fos=new FileOutputStream("BOSDemo.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);

            int size=0;
            byte[] buffer=new byte[10240];
            while((size=bis.read(buffer))!=-1){
                bos.write(buffer, 0, size);
            }
            //刷新此緩衝的輸出流,保證數據全部都能寫出
            bos.flush();
            bis.close();
            bos.close();
            long end=System.currentTimeMillis();
            System.out.println("使用緩衝輸出流和緩衝輸入流實現文件的複製完畢!耗時:"+(end-begin)+"毫秒");
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

運行結果:
使用緩衝輸出流和緩衝輸入流實現文件的複製完畢!耗時:15毫秒

我們可以比較一下這幾種讀寫文件的方式,我個人感覺基本上沒有多大的差別,個人根據實際情況來使用吧!

以上內容只代表我個人的觀點,有什麼錯誤的地方請各路大神指正!

每天進步一點點!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章