更新時(shí)間:2022-08-19 來(lái)源:黑馬程序員 瀏覽量:
I/O提供兩個(gè)帶緩沖的字節(jié)流,分別是BufferedInputStream和BufferedOutputStream,它們的構(gòu)造方法中分別接收InputStream和OutputStream類型的參數(shù)作為對(duì)象,在讀寫(xiě)數(shù)據(jù)時(shí)提供緩沖功能。應(yīng)用程序、緩沖流和底層字節(jié)流之間的關(guān)系如圖7-22所示。
圖7-22 應(yīng)用程序、緩沖流和底層字節(jié)之間的關(guān)系
從圖7-22中可以看出,應(yīng)用程序是通過(guò)緩沖流來(lái)完成數(shù)據(jù)讀寫(xiě)的,而緩沖流又是通過(guò)底層的字節(jié)流與設(shè)備進(jìn)行關(guān)聯(lián)的。
下面通過(guò)一個(gè)案例來(lái)學(xué)習(xí)BufferedInputStream和BufferedOutputStream這兩個(gè)流的用法。首先在Java項(xiàng)目的根目錄下創(chuàng)建一個(gè)名稱為src.txt的文件,并在該文件中隨意寫(xiě)入一些內(nèi)容;然后創(chuàng)建一個(gè)類,在類中使用FileOutputStream創(chuàng)建文件des.txt,并使用字節(jié)流緩沖對(duì)象將文件src.txt中的內(nèi)容復(fù)制到文件des.txt中,如文件7-15所示。
文件7-15 Example14.java
import java.io.*; public class Example14 { public static void main (String[] args) throws Exception { // 創(chuàng)建一個(gè)帶緩沖區(qū)的輸入流 BufferedInputStream bis = new BufferedInputStream (new FileInputStream ("src.txt")) ; // 創(chuàng)建一個(gè)帶緩沖區(qū)的輸出流 BufferedOutputStream bos = new BufferedOutputStream ( new FileOutputStream ("des.txt")) ; int len; while ((len = bis.read()) != -1) { bos.write (len) ; } bis.close () ; bos.close () ; } }
文件7-15中,第5~6行代碼分別創(chuàng)建了BufferedInputStream和BufferedOutputStream兩個(gè)緩沖流對(duì)象,這兩個(gè)流內(nèi)部都定義了一個(gè)大小為8192的字節(jié)數(shù)組;第11~12行代碼中調(diào)用read()或者write()方法讀寫(xiě)數(shù)據(jù)時(shí),首先將讀寫(xiě)的數(shù)據(jù)存入定義好的字節(jié)數(shù)組;然后將字節(jié)數(shù)組的數(shù)據(jù)一次性讀寫(xiě)到文件中,這種方式與7.2.4小節(jié)中講解的字節(jié)流的緩沖區(qū)類似,都對(duì)數(shù)據(jù)進(jìn)行了緩沖,從而有效地提高了數(shù)據(jù)的讀寫(xiě)效率。