IO_字節(jié)流

一.IO概述


1.1 什么是IO

生活中匣砖,你肯定經(jīng)歷過這樣的場景。當你編輯一個文本文件煞烫,忘記了ctrl+s 浑此,可能文件就白白編輯了。當你電腦上插入一個U盤滞详,可以把一個視頻凛俱,拷貝到你的電腦硬盤里。那么數(shù)據(jù)都是在哪些設(shè)備上的呢料饥?鍵盤蒲犬、內(nèi)存、硬盤岸啡、外接設(shè)備等等原叮。

我們把這種數(shù)據(jù)的傳輸,可以看做是一種數(shù)據(jù)的流動巡蘸,按照流動的方向奋隶,以內(nèi)存為基準,分為輸入input 和輸出output 悦荒,即流向內(nèi)存是輸入流唯欣,流出內(nèi)存的輸出流。

Java中I/O操作主要是指使用java.io 包下的內(nèi)容搬味,進行輸入境氢、輸出操作。輸入也叫做讀取數(shù)據(jù)身腻,輸出也叫做作寫出數(shù)據(jù)

1.2 IO的分類

根據(jù)數(shù)據(jù)的流向分為:輸入流和輸出流产还。

輸入流:把數(shù)據(jù)從其他設(shè)備上讀取到內(nèi)存中的流。

輸出流:把數(shù)據(jù)從內(nèi)存中寫出到其他設(shè)備上的流

格局數(shù)據(jù)的類型分為:字節(jié)流和字符流嘀趟。

字節(jié)流:以字節(jié)為單位脐区,讀寫數(shù)據(jù)的流。

字符流:以字符為單位她按,讀寫數(shù)據(jù)的流牛隅。

1.3 IO的流向說明圖解

IO的流向說明圖解

1.4 頂級父類們

父類

二.字節(jié)流


2.1 一切皆為字節(jié)

一切文件數(shù)據(jù)(文本、圖片酌泰、視頻等)在存儲時媒佣,都是以二進制數(shù)字的形式保存,都一個一個的字節(jié)陵刹,那么傳輸時一樣如此默伍。所以,字節(jié)流可以傳輸任意文件數(shù)據(jù)。在操作流的時候也糊,我們要時刻明確炼蹦,無論使用什么樣的流對象,底層傳輸?shù)氖冀K為二進制數(shù)據(jù)狸剃。

2.2 字節(jié)輸出流【OutputStream】

java.io.OutputStream 抽象類是表示字節(jié)輸出流的所有類的超類掐隐,將指定的字節(jié)信息寫出到目的地。它定義了字節(jié)輸出流的基本共性功能方法钞馁。

public void close()?:關(guān)閉此輸出流并釋放與此流相關(guān)聯(lián)的任何系統(tǒng)資源虑省。

public void flush()?:刷新此輸出流并強制任何緩沖的輸出字節(jié)被寫出。

public void write(byte[] b)?:將字節(jié)數(shù)組中的內(nèi)容, 寫出到輸出流關(guān)聯(lián)的文件中

public void write(byte[] b, int off, int len) :將字節(jié)數(shù)組中, 從off索引, 開始的len個字節(jié), 寫出到輸出流關(guān)聯(lián)的文件中

小貼士

close方法僧凰,當完成流的操作時探颈,必須調(diào)用此方法,釋放系統(tǒng)資源允悦。

2.3 FileOutputStream類

OutputStream?有很多子類膝擂,我們從最簡單的一個子類開始虑啤。

java.io.FileOutputStream?類是文件輸出流隙弛,用于將數(shù)據(jù)寫出到文件。

a.構(gòu)造方法

public FileOutputStream(File file)?:創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件狞山。

public FileOutputStream(String name)?: 創(chuàng)建文件輸出流以指定的名稱寫入文件全闷。

當你創(chuàng)建一個流對象時,必須傳入一個文件路徑萍启。該路徑下总珠,如果沒有這個文件,會創(chuàng)建該文件勘纯。如果有這個文件局服,會清空這個文件的數(shù)據(jù)。

構(gòu)造舉例驳遵,代碼如下:

構(gòu)造舉例代碼
程序運行之后創(chuàng)建的兩個文件對象??

b.寫出字節(jié)數(shù)據(jù)

1.?寫出字節(jié): write(int b) 方法淫奔,每次可以寫出一個字節(jié)數(shù)據(jù),代碼使用演示:

write(int b)寫出字節(jié)
輸出結(jié)果


小貼士:

a. 雖然參數(shù)為int類型四個字節(jié)堤结,但是只會保留一個字節(jié)的信息寫出唆迁。

b. 流操作完畢后,必須釋放系統(tǒng)資源竞穷,調(diào)用close方法唐责,千萬記得。

2. 寫出字節(jié)數(shù)組: write(byte[] b) 瘾带,每次可以寫出數(shù)組中的數(shù)據(jù)鼠哥,代碼使用演示:

write(byte[] b)寫出字節(jié)數(shù)組??
運行結(jié)果

3. 寫出指定長度字節(jié)數(shù)組: write(byte[] b, int off, int len) ,每次寫出從off索引開始,len個字節(jié),代碼使用演示:

?寫出指定長度字節(jié)數(shù)組:?write(byte[] b, int off, int len)??
輸出結(jié)果


c.數(shù)據(jù)追加續(xù)寫

經(jīng)過以上的演示朴恳,每次程序運行科盛,創(chuàng)建輸出流對象,都會清空目標文件中的數(shù)據(jù)菜皂。如何保留目標文件中數(shù)據(jù)贞绵,還能繼續(xù)添加新數(shù)據(jù)呢?

public FileOutputStream(File file, boolean append)?: 創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件恍飘。

public FileOutputStream(String name, boolean append)?: 創(chuàng)建文件輸出流以指定的名稱寫入文件榨崩。

這兩個構(gòu)造方法,參數(shù)中都需要傳入一個boolean類型的值章母, true 表示追加數(shù)據(jù)母蛛, false 表示清空原有數(shù)據(jù)。這樣創(chuàng)建的輸出流對象乳怎,就可以指定是否追加續(xù)寫了彩郊,代碼使用演示:

追加續(xù)寫


運行結(jié)果


d.寫出換行

Windows系統(tǒng)里,換行符號是\r\n蚪缀。代碼使用演示:

\r\n寫出換行
運行結(jié)果


回車符\r 和換行符\n :

回車符:回到一行的開頭(return)秫逝。

換行符:下一行(newline)。

系統(tǒng)中的換行:

Windows系統(tǒng)里询枚,每行結(jié)尾是 回車+換行 违帆,即\r\n?;

Unix系統(tǒng)里金蜀,每行結(jié)尾只有 換行 刷后,即\n?

Mac系統(tǒng)里渊抄,每行結(jié)尾是 回車 尝胆,即\r?。從 Mac OS X開始與Linux統(tǒng)一护桦。

2.4 字節(jié)輸入流【InputStream】

java.io.InputStream?抽象類是表示字節(jié)輸入流的所有類的超類含衔,可以讀取字節(jié)信息到內(nèi)存中。它定義了字節(jié)輸入流的基本共性功能方法嘶炭。

public void close() :關(guān)閉此輸入流并釋放與此流相關(guān)聯(lián)的任何系統(tǒng)資源抱慌。

public abstract int read() :?從此輸入流中(輸入流關(guān)聯(lián)的文件中)讀取一個數(shù)據(jù)字節(jié)

特點: read可以讀取一個字節(jié), 得到的是int類型的數(shù)字; 每讀取一次, 下一次讀取就可以讀取到下一個字節(jié),如果讀取到文件的末尾, 則返回-1.

public int read(byte[] b) :?從輸入流中讀取一些字節(jié)數(shù),并將它們存儲到字節(jié)數(shù)組 b中 眨猎。返回值是有效字節(jié)的個數(shù),如果讀取到文件的末尾, 返回-1.

小貼士:close方法抑进,當完成流的操作時,必須調(diào)用此方法睡陪,釋放系統(tǒng)資源寺渗。

2.5FileInputStream類

java.io.FileInputStream?類是文件輸入流匿情,從文件中讀取字節(jié)。

a.構(gòu)造方法

FileInputStream(File file)?: 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream 信殊,該文件由文件系統(tǒng)中的 File對象 file命名炬称。

FileInputStream(String name)?: 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的路徑名 name命名涡拘。

當你創(chuàng)建一個流對象時玲躯,必須傳入一個文件路徑。該路徑下鳄乏,如果沒有該文件,會拋出FileNotFoundException?跷车。

構(gòu)造舉例,代碼如下:

創(chuàng)建字節(jié)輸入流對象

b.讀取字節(jié)數(shù)據(jù)

1. 讀取字節(jié): read 方法橱野,每次可以讀取一個字節(jié)的數(shù)據(jù)朽缴,提升為int類型,讀取到文件末尾水援,返回-1 密强,代碼使用演示:

準備一個Read.txt文件放在工作目錄下,我們用字節(jié)輸入流來讀取它

準備讀取的文件

讀取代碼:

read 方法蜗元,每次可以讀取一個字節(jié)的數(shù)據(jù)??

循環(huán)改進讀取方式或渤,代碼使用演示:

利用while循環(huán)讀取
控制臺輸出結(jié)果

小貼士:

a). 雖然讀取了一個字節(jié),但是會自動提升為int類型许帐。

b). 流操作完畢后劳坑,必須釋放系統(tǒng)資源,調(diào)用close方法成畦,千萬記得。

2.使用字節(jié)數(shù)組讀壤钥:?read(byte[] b)?循帐,每次讀取b的長度個字節(jié)到數(shù)組中,返回讀取到的有效字節(jié)個數(shù)舀武,讀取到末尾時拄养,返回-1 ,代碼使用演示:

read(byte[] b) : 從輸入流中讀取一些字節(jié)數(shù)银舱,并將它們存儲到字節(jié)數(shù)組 b中??
輸出結(jié)果瘪匿,有個錯誤數(shù)據(jù)b??

錯誤數(shù)據(jù)d ,是由于最后一次讀取時寻馏,只讀取一個字節(jié)e 棋弥,數(shù)組中,上次讀取的數(shù)據(jù)沒有被完全替換诚欠,所以要通過len 顽染,獲取有效的字節(jié)漾岳,代碼使用演示:

read(byte[] b): 的返回值是有效字節(jié)的個數(shù)??
正確的打印結(jié)果

2.6 字節(jié)流練習(xí):

工作文件夾準備一張圖片來拷貝它

a.圖片復(fù)制(字節(jié)流一個字節(jié)一個字節(jié)的拷貝)

字節(jié)流一個字節(jié)一個字節(jié)的拷貝??

b.圖片復(fù)制(使用數(shù)組的方式拷貝)

使用數(shù)組的方式拷貝
結(jié)果


查看當前工作文件夾

單擊此處查看當前工作文件夾的路徑??
此處為當前工作文件夾的路徑??
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粉寞,隨后出現(xiàn)的幾起案子尼荆,更是在濱河造成了極大的恐慌,老刑警劉巖唧垦,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捅儒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門茬故,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乘盖,“玉大人,你說我怎么就攤上這事障本。” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵摇锋,是天一觀的道長。 經(jīng)常有香客問我站超,道長荸恕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任死相,我火速辦了婚禮融求,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘算撮。我一直安慰自己生宛,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布肮柜。 她就那樣靜靜地躺著陷舅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪审洞。 梳的紋絲不亂的頭發(fā)上莱睁,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音芒澜,去河邊找鬼仰剿。 笑死,一個胖子當著我的面吹牛痴晦,可吹牛的內(nèi)容都是我干的南吮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼阅酪,長吁一口氣:“原來是場噩夢啊……” “哼旨袒!你這毒婦竟也來了汁针?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砚尽,失蹤者是張志新(化名)和其女友劉穎施无,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體必孤,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡猾骡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敷搪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴想。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赡勘,靈堂內(nèi)的尸體忽然破棺而出嫂便,到底是詐尸還是另有隱情,我是刑警寧澤闸与,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布毙替,位于F島的核電站,受9級特大地震影響践樱,放射性物質(zhì)發(fā)生泄漏厂画。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一拷邢、第九天 我趴在偏房一處隱蔽的房頂上張望袱院。 院中可真熱鬧,春花似錦瞭稼、人聲如沸忽洛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脐瑰。三九已至,卻和暖如春廷臼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绝页。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工荠商, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人续誉。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓莱没,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酷鸦。 傳聞我的和親對象是個殘疾皇子饰躲,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容