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