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毫秒
我們可以比較一下這幾種讀寫文件的方式,我個人感覺基本上沒有多大的差別,個人根據實際情況來使用吧!
以上內容只代表我個人的觀點,有什麼錯誤的地方請各路大神指正!
每天進步一點點!