1. 程式人生 > >IO流學習筆記(二)之BufferedWriter與BufferedReader及例項Demo

IO流學習筆記(二)之BufferedWriter與BufferedReader及例項Demo

在之前的學習筆記(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter與FileReader的Demo使用的中轉資料buf實際就是緩衝區,是由我們自己建立的。

緩衝區可以提高效率,Java對緩衝區進行了封裝,封裝成了物件,即讀與寫操作都進行了緩衝:
BufferedWriter
BufferedReader
緩衝區要結合流才可以使用
在流的基礎上對流的功能進行了增強

為什麼會提高效率(同資料庫連線池,避免每次的建立連線和斷開連線,直接建立一個容器,使用完放回即可):
常規的讀一次寫一次的方式,磁頭需要進行不斷的切換


緩衝的方式,每次讀取一塊便在記憶體中儲存一塊,一旦裝滿了或者沒有資料可以繼續讀取了,就開始寫操作

程式碼:設計優化(重構);效能優化(最常見的手段之一就是緩衝區)

public class BufferdeWriter extends Writer:
將文字寫入字元輸出流,緩衝各個字元,從而提供單個字元、雅思考試時間陣列和字串的高效寫入

本質:用陣列在緩衝存流中的資料,因此緩衝區在被建立時,必須要有被快取的物件
BufferedWriter(Writer out):建立一個使用預設大小輸出緩衝區的緩衝字元輸出流
BufferedWriter(Writer out,int sz):建立一個使用給定大小輸出緩衝區的緩衝字元輸出流


close():關閉此流,但要先重新整理它
flush():重新整理該流的緩衝
newLine():寫入一個分隔符,實際就是將System.getProperty(“line.separator”)進行了封裝
write(char[] cbuf,int off,int len):寫入字元陣列的某一部分
write(char c):寫入單個字元
write(String s,int off,int len):寫入字串的某一部分

public BufferedReader extends Reader:
從字元輸入流讀取文字,緩衝各個字元,從而實現字元、陣列和行(文字的行數通過回車符來進行判定)的高效讀取

注意:緩衝區物件(例如BufferedWriter)操作的都是緩衝區中的內容,email的格式內容從外設到記憶體是由底層流物件完成的(例如Writer),具體將在如下介紹

read():讀取單個字元
read(char[] cbuf,int off,int len):將字元讀入陣列的某一部分
readLine():讀取一個文字行,通過下列字元之一即可認為某行已終止,換行(‘\n’),回車(‘\r’)或回車後直接跟著換行
返回:包含該行內容的字串,不包含任何終止符,如果已經到達流末尾,則返回null

這裡寫圖片描述

bufr.read(buf)是建立緩衝區時呼叫的方法,因此雖然BufferedReader的read()方法是讀取單個字元,但是也是從緩衝區讀取,已經是高效方法了。

readLine()方法,在讀到一個數據之後不進行操作,而是繼續進行緩衝並判斷結束標記,詳細可以參加圖示註釋。

注:註釋部分程式碼是逐個讀取字元