"

晨光彩票app-APP全能版下载拥有全球最顶尖的原生APP,每天为您提供千场精彩体育赛事,晨光彩票app-APP全能版下载更有真人、彩票、电子老虎机、真人电子竞技游戏等多种娱乐方式选择,晨光彩票app-APP全能版下载让您尽享娱乐、赛事投注等,且无后顾之忧!

"
首頁 > 深入理解Java輸入輸出流

深入理解Java輸入輸出流

互聯網 2021-03-08 16:55:36

前面介紹了Java.io包的File類,File類用于目錄和文件的創建、刪除、遍歷等操作,但不能用于文件的讀寫。

Java 對文件的寫入和讀取涉及到流的概念,寫入為輸出流,讀取為輸入流。如何理解流的概念呢?可以把流看成流動的自來水,打開水龍頭,自來水就會通過自來水管從水源流到用戶家中,同樣的道理,水庫中的水也會通過管道流入到水源。從水源流出到用戶住家為自來水的輸出流,從水庫流入到水源為自來水的輸入流,只有這樣,自來水才能源源不斷地流出到用戶家中。

如果把水源看成文件,用戶住家為讀取文件的對象,水庫為寫入文件的對象,就很容易理解Java的輸入與輸出流了。當Java程序的寫入對象(水庫)需要將自來水寫入到水源(文件)時,需要建立一條從寫入對象(水庫)到水源(文件)的通道,這個通道就是輸入流;當Java程序的讀取對象(用戶住家)需要讀取水源(文件)時,也需要建立一條從水源(文件)到讀取對象(用戶住家)的通道,這個通道就是輸出流。

在Java程序中,要想從文件中讀取數據,需要在程序和文件之間建立一條數據輸入的通道,這樣程序就可以從文件中讀取數據了;反之,如果要在Java程序中把數據寫入到文件中,也需要在程序和文件之間建立一條數據輸出的通道。當程序創建輸入流對象時,Java會自動建立這個數據輸入通道,而創建輸出流時,Java也會自動建立這個數據輸出通道。如下圖所示:

Java程序讀取與寫入數據

輸入流是從文件讀取數據,是一個拉取數據的過程;輸出流是將數據寫入到文件,是一個推送數據的過程。

為了便于理解輸入輸出流,前面都是以文件為數據源來討論的。其實,Java的輸入與輸出流支持任何數據源的讀取與寫入,包括鍵盤、文件、網絡、數據庫等數據源。

輸入流和輸出流按讀取和寫入的數據單位可分為字節流和字符流,字節流是以字節為單位傳輸數據的流,字符流是以字符為單位傳輸數據的流。

Java所提供的輸入流和輸出流類封裝在Java.io包中,Java輸入輸出流的體系結構如下圖所示:

Java輸入輸出流體系結構

從圖中可以看出,Reader和Write為字符輸入輸出流,InputStream和OutputStream為字節輸入輸出流。這四個類屬于抽象流類,不能在程序中直接實例化使用,可以使用其派生的類。

InputStream類

InputStream抽象類是表示字節輸入流的所有類的超類,它以字節為單位從數據源中讀取數據,其派生的常用子類說明如下:

●FileInputStream類

該類以字節為單位從文件中讀取數據。

●ByteArrayInputStream類

該類在內存中創建一個字節數組緩沖區,從輸入流讀取的數據保存在該字節數組緩沖區中。

●ObjectInputStream類

該類從輸入流讀入對象,讀取對象信息。

InputStream類定義了Java的輸入流模型,下面是其常用方法的一個說明:

●public abstract int read() throws IOExecption

該方法用于從輸入流中讀取數據的下一個字節,返回讀到的字節值,若遇到流的末尾,返回-1。

●public int read(byte[] b) throws IOExecption

該方法用于從輸入流中讀取b.length個字節的數據,并將數據存儲到緩沖區數組b中,返回的是實際讀到的字節數。

●public int read(byte[] b,int off,int len) throws IOExecption

該方法用于從輸入流中讀取len個字節的數據,并從數組b的off位置開始寫入到這個數組中。

●public void close() throws IOExecption

關閉此輸入流,并釋放與此輸入流相關聯的所有系統資源。

OutputStream類

OutputStream抽象類是表示字節輸出流的所有類的超類,它以字節為單位將數據寫入數據源,其派生的常用子類說明如下:

●FileOutputStream類

該類以字節為單位將數據寫入到文件。

●ByteArrayOutputStream類

該類在內存中創建一個字節數組緩沖區,所有發送到輸出流的數據保存在該字節數組緩沖區中。

●ObjectOutputStream類

該類將對象信息寫入到輸出流。

下面是OutputStream類的常用方法介紹。

●public abstract void write(int b) throws IOExecption

該方法用于將指定的字節寫入到輸出流。

●public int write(byte[] b) throws IOExecption

該方法用于將b.length個字節從指定的byte數組寫入到輸出流。

●public int write(byte[] b,int off,int len) throws IOExecption

該方法用于將len個字節的數據,并從數組b的off位置開始寫入到輸出流。

●public void close() throws IOExecption

關閉此輸出流,并釋放與此輸出流相關聯的所有系統資源。

Reader類

Read抽象類是表示字符輸入流的所有類的超類,它以字符為單位從數據源中讀取數據。其派生的常用子類說明如下:

●InputStreamReader類

該類從數據源讀取字節并將其解碼為使用指定的字符集的字符。

●FileReader類

該類繼承于InputStreamReader,用于讀取字符類文件,如文本文件。

●BufferedReader類

該類用于將緩沖區中的數據以字符為單位讀取。

下面是Reader類的常用方法介紹。

●public int read(int b) throws IOExecption

該方法用于讀取單個字符,返回作為整數讀取的字符,如果已經到達流的末尾,返回-1。

●public int read(char[] cbuf) throws IOExecption

該方法用于將字符讀入到cbuf,返回讀取的字符數。

●public abstract int read(char[] cbuf,int off,int len) throws IOExecption

該方法用于讀取len個字符的數據,并從數組cbuf的off位置讀入到這個數組中。

●public abstractvoid close() throws IOExecption

關閉此輸入流,并釋放與此輸出流相關聯的所有系統資源。

Writer類

Writer抽象類是表示字符輸出流的所有類的超類,它以字符為單位向數據源寫出數據。其派生的常用子類說明如下:

●OutputStreamWriter類

該類將輸出的字符流變為字節流,即將一個字符流的輸出對象變為字節流的輸出對象。

●FileWriter類

該類從 OutputStreamWriter 類繼承而來。該類按字符向字符類文件寫入數據。

●BufferedWriter類

該類用于將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符,數組和字符串的高效寫入。

下面是Writer類的常用方法介紹。

●public void write(int b) throws IOExecption

該方法用于向數據源寫入單個字符。

●public void write (char[] cbuf) throws IOExecption

該方法用于向數據源寫入字符數組。

●public abstract void write (char[] cbuf,int off,int len) throws IOExecption

該方法用于向數據源寫入len個字符數據,并從數組cbuf的off位置開始。

●public void write (Stringstr) throws IOExecption

該方法用于向數據源寫入字符串。

●public abstract void flush() throws IOExecption

刷新該輸出流的緩沖,將緩沖的數據全部寫入到數據源。

●public abstractvoid close() throws IOExecption

關閉此輸出流,關閉之前需先調用flush()。

■ 知識點撥

流是一個抽象的概念,它代表一串數據的集合,當Java程序需要從數據源讀取數據時,就需要開啟一個到數據源的流。同樣,當程序需要輸出數據到目的地時,也需要開啟一個流。流的創建是為了更方便地處理數據的輸入和輸出。

免責聲明:非本網注明原創的信息,皆為程序自動獲取互聯網,目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,并提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件12小時內刪除。
晨光彩票app-APP全能版下载 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>