字節(jié)流
程序使用字節(jié)流來執(zhí)行8位字節(jié)的輸入和輸出,所有的字節(jié)流類都是從InputStream和OutputStream派生出來的。
有許多字節(jié)流類,為了演示字節(jié)流的工作原理,我們將重點關(guān)注文件I/O字節(jié)流,F(xiàn)ileInputStream和FileOutputStream,其他類型的字節(jié)流以大致相同的方式使用,它們的不同之處主要在于它們的構(gòu)造方式。
使用字節(jié)流我們將通過檢查名為CopyBytes的示例程序來探索FileInputStream和FileOutputStream,該程序使用字節(jié)流來復(fù)制xanadu.txt,一次一個字節(jié)。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream("outagain.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } }
CopyBytes將大部分時間花在一個簡單的循環(huán)中,該循環(huán)讀取輸入流和寫入輸出流,一次一個字節(jié),如下圖所示。
始終關(guān)閉流在不再需要流時關(guān)閉流非常重要 — 非常重要的是CopyBytes使用finally塊來保證即使發(fā)生錯誤也會關(guān)閉兩個流,這種做法有助于避免嚴重的資源泄漏。
一個可能的錯誤是CopyBytes無法打開一個或兩個文件,發(fā)生這種情況時,對應(yīng)于該文件的流變量永遠不會從其初始null值更改,這就是為什么CopyBytes在調(diào)用close之前確保每個流變量都包含一個對象引用。
何時不使用字節(jié)流CopyBytes看起來像一個普通的程序,但它實際上代表了一種你應(yīng)該避免的低級別I/O,由于xanadu.txt包含字符數(shù)據(jù),因此最好的方法是使用字符流,如下一節(jié)中所述。還有用于更復(fù)雜數(shù)據(jù)類型的流,字節(jié)流應(yīng)僅用于最原始的I/O。
那么為什么要談?wù)撟止?jié)流呢?因為所有其他流類型都是基于字節(jié)流構(gòu)建的。
上一篇:I/O流 下一篇:字符流文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72970.html
字符流 Java平臺使用Unicode約定存儲字符值,字符流I/O自動將此內(nèi)部格式與本地字符集進行轉(zhuǎn)換,在Western語言環(huán)境中,本地字符集通常是ASCII的8位超集。 對于大多數(shù)應(yīng)用程序,具有字符流的I/O并不比具有字節(jié)流的I/O復(fù)雜,使用流類完成的輸入和輸出會自動轉(zhuǎn)換為本地字符集和從本地字符集轉(zhuǎn)換,使用字符流代替字節(jié)流的程序會自動適應(yīng)本地字符集并為國際化做了準備 — 所有這些都無需程序員的額...
數(shù)據(jù)流 數(shù)據(jù)流支持原始數(shù)據(jù)類型值(boolean、char、byte、short、int、long、float和double)以及String值的二進制I/O,所有數(shù)據(jù)流都實現(xiàn)DataInput接口或DataOutput接口,本節(jié)重點介紹這些接口最廣泛使用的實現(xiàn),DataInputStream和DataOutputStream。 DataStreams示例通過寫出一組數(shù)據(jù)記錄,然后再次讀取它們來演...
命令行I/O 程序通常從命令行運行,并在命令行環(huán)境中與用戶交互,Java平臺以兩種方式支持這種交互:通過標準流和控制臺。 標準流 標準流是許多操作系統(tǒng)的一個特性,默認情況下,它們從鍵盤讀取輸入并將輸出寫入顯示器,它們還支持文件和程序之間的I/O,但該功能由命令行解釋器控制,而不是程序。 Java平臺支持三種標準流:標準輸入,可通過System.in訪問;標準輸出,可通過System.out訪問;和...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復(fù)習(xí)一塊可能會令初學(xué)者比較頭疼的內(nèi)容,起碼當時讓我很有些頭疼的內(nèi)容,那就是流。在這里壹哥會從兩部分展開介紹流,即與流。除此之外盡量使用字節(jié)流。關(guān)閉此輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復(fù)習(xí)一塊可...
I/O流 I/O流表示輸入源或輸出目標,流可以表示許多不同類型的源和目標,包括磁盤文件、設(shè)備、其他程序和內(nèi)存數(shù)組。 流支持許多不同類型的數(shù)據(jù),包括簡單字節(jié)、原始數(shù)據(jù)類型、本地化字符和對象,有些流只是傳遞數(shù)據(jù),其他人以有用的方式操縱和轉(zhuǎn)換數(shù)據(jù)。 無論它們?nèi)绾卧趦?nèi)部工作,所有流都為使用它們的程序提供相同的簡單模型:流是一系列數(shù)據(jù),程序使用輸入流從源讀取數(shù)據(jù),一次一個條目: showImg(https:...
閱讀 2378·2021-11-23 09:51
閱讀 2025·2021-10-14 09:43
閱讀 2812·2021-09-27 13:35
閱讀 1182·2021-09-22 15:54
閱讀 2549·2021-09-13 10:36
閱讀 3876·2019-08-30 15:56
閱讀 3439·2019-08-30 14:09
閱讀 1747·2019-08-30 12:57