1. 程式人生 > 其它 >IO流(緩衝流)

IO流(緩衝流)

IO流(緩衝流)

一,前言

​ 掌握緩衝流的概念,掌握位元組字元緩衝流的使用,掌握字元流讀行方法,換行方法。

二,概念

​ 快取流也稱為高效流,或者高階流。緩衝流自帶緩衝區,可以提高原始位元組流,字元流讀寫資料的效能。

BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter

三,位元組緩衝輸入流(BufferedInputStream)

​ 在建立 BufferedInputStream 時,會建立一個內部緩衝區陣列。緩衝區用以減少頻繁的IO操作,提高程式的效能。

1.構造方法

BufferedInputStream(InputStream in):
	建立一個 BufferedInputStream 並儲存其引數,即輸入流 in,以便將來使用。          
BufferedInputStream(InputStream in, int size):
	建立具有指定緩衝區大小的 BufferedInputStream 並儲存其引數,即輸入流 in,以便將來使用。

2.常用方法

void close():
	關閉此輸入流並釋放與該流關聯的所有系統資源。 
int read(byte[] b):
	從輸入流中讀取一定數量的位元組,並將其儲存在緩衝區陣列 b 中。 

四,位元組緩衝輸出流(BufferedOutputStream)

​ 在建立 BufferedInputStream 時,會建立一個內部緩衝區陣列。緩衝區減少IO操作以提高效能。

1.構造方法

BufferedOutputStream(OutputStream out):
	建立一個新的緩衝輸出流,以將資料寫入指定的底層輸出流。
BufferedOutputStream(OutputStream out, int size):
	建立一個新的緩衝輸出流,以便以指定的緩衝區大小將資料寫入指定的底層輸出流。

2.常用方法

void close():
	關閉此檔案輸出流並釋放與此流相關聯的任何系統資源。
void write(byte[] b,int off,int len):
	將 b.length個位元組從指定的位元組陣列寫入此檔案輸出流。
void flush():
	重新整理此輸出流並強制任何緩衝的輸出位元組被寫出。 

五,字元緩衝輸入流(BufferedReader)

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

1.構造方法

BufferedReader(Reader in):
	建立一個使用預設大小輸入緩衝區的緩衝字元輸入流。 
BufferedReader(Reader in, int sz):
	建立一個使用指定大小輸入緩衝區的緩衝字元輸入流。 

2.常用方法

String readLine():
	讀取一個文字行。 

六,字元緩衝輸出流(BufferedWriter)

​ BufferedWriter使用裝飾器模式,對Writer類的子類提供快取機制。

1.構造方法

BufferedWriter(Writer out):
	建立一個使用預設大小輸出緩衝區的緩衝字元輸出流。          
BufferedWriter(Writer out, int sz):
	建立一個使用給定大小輸出緩衝區的新緩衝字元輸出流。 

2.常用方法

 void newLine():
 	寫入一個行分隔符。 

七,字元緩衝流的操作示例

例:

public static void main(String[] args) {
		//建立緩衝流
		File file = new File("E:/aaaa.txt");
		File f = new File("C:\\Users\\29854\\Desktop\\aaa.txt");
		BufferedReader bd = null;
		BufferedWriter bw = null;
		try {
			bd = new BufferedReader(new FileReader(file));
			bw = new BufferedWriter(new FileWriter(f,true));
			//讀寫資料
			String str = null;	
			while ((str = bd.readLine()) != null) {			
                bw.write(str);
                bw.newLine();
				bw.flush();
			}		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//關流
			if (bd != null) {
				try {
					bd.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}	
		}	
	}

八,附加(緩衝區的概念)

​ 某些情況下,如果一個程式頻繁地操作一個資源(如檔案或資料庫),則效能會很低;
​ 為了提升效能,就可以將一部分資料暫時讀入到記憶體的一塊區域之中,以後直接從此區域中讀取資料即可,因為讀取記憶體速度會比較快,這樣可以提升程式的效能;