IO流

1.概述

? ? IO參照物是當(dāng)前程序使用內(nèi)存

? ? I : input 從硬盤讀取數(shù)據(jù)到內(nèi)存! read 讀

? ? O : output 從內(nèi)存寫入數(shù)據(jù)到硬盤! write 寫

? ? 對于Java而言: 按照處理單位來看

? ? ? ? 字節(jié)流: 所有的數(shù)據(jù)按照字節(jié)方式進(jìn)行傳輸!

? ? ? ? 字符流: 數(shù)據(jù)按照當(dāng)前系統(tǒng)采用的編碼集方式進(jìn)行字符操作,該操作局限性很大!

? ? ? ? ? ? ? ? ? ? ? ? 所能操作的并且不會出現(xiàn)錯(cuò)誤的文件,有且只有記事本打開無亂碼的文本文件

? ? 組合:字節(jié)輸入流,字節(jié)輸出流,字符輸入流,字符輸出流。

2.緩存概念

? ? 緩存緩沖有什么好處?

? ? ? ? 一般的網(wǎng)站,第二次打開總比第一次打開速度要快!

? ? ? ? 第一次加載網(wǎng)站打開的過程中,會對當(dāng)前網(wǎng)頁一些固定資源進(jìn)行保存,提高用戶在訪問頁面時(shí)的速度,優(yōu)化體驗(yàn)!

? ? 開發(fā)中使用緩存緩沖可以有效地提高文件操作效率!

3. IO流分類

? ? class InputStream? ? 字節(jié)輸入流基類

? ? --|? ? class FileInputStream? ? 文件操作字節(jié)輸入流

? ? class OutputStream? ? 字節(jié)輸出流基類

? ? --|? ? class FileOutputStream? ? 文件操作字符輸入流

? ? class Reader? ? 字符輸入流基類

? ? --|? ? class FileReader? ? 文件操作字符輸入流

? ? class Writer? ? 字符輸出流基類

? ? --|? ? class FileWriter? ? 文件操作字符輸出流

? ? 需要學(xué)習(xí)的方法: read? ? write

? ? 緩沖流:

? ? ? ? BufferedInputStream? ? 字節(jié)輸入緩沖流

? ? ? ? BufferedOutputStream? ? 字節(jié)輸出緩沖流

? ? ? ? BufferedReader? ? ? ? 字符輸入緩沖流

? ? ? ? BufferedWriter? ? 字符輸出緩沖流

4.FileInputStream文件操作字節(jié)輸入流

? ? Constructor構(gòu)造方法

? ??????FileInputStream(String filePath);????根據(jù)用戶指定的文件路徑創(chuàng)建對應(yīng)的FileInputStream,文件操作輸入字節(jié)流,如果文件不存在,拋出異常FileNotFoundException

? ??FileInputStream(File file);????根據(jù)用戶指定對應(yīng)文件的File類對象,創(chuàng)建對應(yīng)的FileInputStream,如果文件不存在,拋出異常FileNotFoundException

? ? Method成員方法

? ? ? ? int read();? ? 從文件中讀取一個(gè)字節(jié)數(shù)據(jù)返回。如果讀取到末尾,返回-1 EOF Of File

? ? ? ? int read(byte[] buf);【重點(diǎn)】? ? 從文件中讀取數(shù)據(jù)到緩沖數(shù)組buf中,返回值類型是從文件中讀取到的字節(jié)個(gè)數(shù),如果讀取到文件末尾,返回-1,EOF Of File

? ? ? ? 讀取數(shù)據(jù)的方法,在運(yùn)行過程中出現(xiàn)了問題,拋出異常IOException

? ? 操作流程:

? ? ? ? 1.明確對應(yīng)文件的路徑,可以選擇直接給與對應(yīng)的String類型路徑,或者創(chuàng)建對應(yīng)的File類對象,作為參數(shù)

? ? ? ? 2.創(chuàng)建FileInputStream文件操作字節(jié)輸入流,打開文件操作管道

? ? ? ? 3.從FileInputStream對象中使用方法,讀取數(shù)據(jù)

? ? ? ? 4.關(guān)閉資源!FileInputStram類對象==>水龍頭!

演示
演示
時(shí)間效率

5.FileOutputStream 文件操作字節(jié)輸出流

? ??Constructor構(gòu)造方法

? ??????FileOutputStream(String filePath);????根據(jù)用戶指定的路徑,創(chuàng)建對應(yīng)的FileOutputStream文件操作輸出流對象。如果路徑不合法,拋出異常FileNotFoundException。采用寫入數(shù)據(jù)到文件的方式,是【刪除寫】!!!文件內(nèi)容清空,在寫入數(shù)據(jù)

????????FileOutputStream(File file);????根據(jù)用戶指定的File類對象,創(chuàng)建對應(yīng)FileOutputStream文件操作輸出流對象,如果路徑不合法,拋出異常FileNotFoundException。采用寫入數(shù)據(jù)到文件的方式,是【刪除寫】!!!文件內(nèi)容清空,在寫入數(shù)據(jù)

????????FileOutputStream(String filePath, boolean append);????根據(jù)用戶指定的路徑,創(chuàng)建對應(yīng)的FileOutputStream文件操作輸出流對象。如果路徑不合法,拋出異常FileNotFoundException。append參數(shù)是boolean類型,如果傳入?yún)?shù)為true,表示【追加寫】,在文件末尾寫入數(shù)據(jù)

????????FileOutputStream(File file, boolean append);????根據(jù)用戶指定的File類對象,創(chuàng)建對應(yīng)FileOutputStream文件操作輸出流對象,如果路徑不合法,拋出異常FileNotFoundException。append參數(shù)是boolean類型,如果傳入?yún)?shù)為true,表示【追加寫】,在文件末尾寫入數(shù)據(jù)

? ??Method成員方法? ??

? ??????void write(int b);????寫入一個(gè)字節(jié)數(shù)據(jù)寫入到文件中

? ??????void write(byte[] buf);? ??寫入一個(gè)字節(jié)數(shù)組到文件中????

? ??????void write(byte[] buf, int off, int count);????寫入一個(gè)字節(jié)數(shù)組到文件中,要求從off偏移位置開始,計(jì)數(shù)count

? ? 操作流程:

? ??????1. 明確對應(yīng)文件的路徑,可以選擇直接給予對應(yīng)的String類型路徑,或者創(chuàng)建對應(yīng)的File類對象,作為參數(shù)

????????2. 創(chuàng)建FileOutputStream文件操作輸出字節(jié)流,打開文件操作管道

????????3. 使用FileOutputStream對象寫入數(shù)據(jù)到文件中

????????4. 關(guān)閉資源!!!

? ? 注意:

? ? ? ? 1.FileOutputStream擁有創(chuàng)建文件的能力,在路徑合法,且對應(yīng)目錄有寫入權(quán)限下可以創(chuàng)建文件

? ? ????2.區(qū)分刪除寫和追加寫

演示

6.FileReader 文件操作字符輸入流

????Constructor構(gòu)造方法

????????FileReader(String filePath);????根據(jù)指定路徑的文件創(chuàng)建對應(yīng)的文件字符輸入流對象,如果文件不存在,拋出異常FileNotFoundException

FileReader(File file);????根據(jù)指定路徑的File類對象創(chuàng)建文件字符輸入流對象,如果文件不存在,拋出異常FileNotFoundException

????Method成員方法

????int read();????從文件中讀取一個(gè)字符數(shù)據(jù),返回值為int類型,int類型數(shù)據(jù)中有且只有低十六位是有效數(shù)據(jù),如果讀取到文件末尾返回-1 EOF End Of File

????int read(char[] buf);????從文件中讀取數(shù)據(jù)到char類型緩沖數(shù)組buf,返回值是讀取到字符個(gè)數(shù)。如果讀取到文件末尾返回-1 EOF End Of File

????操作流程:

????????1. 明確需要讀取數(shù)據(jù)的文件

????????2. 創(chuàng)建FileReader對象,打開文件操作管道

????????3. 使用FileReader類對象方法,讀取文件數(shù)據(jù)

????????4. 關(guān)閉資源

演示

7.FileWriter文件操作字符輸出流

? ??Constructor構(gòu)造方法:

????????FileWriter( String filePath);????根據(jù)用戶指定的路徑,創(chuàng)建對應(yīng)的FileWriter文件操作字符輸出流對象。如果路徑不合法,拋出異常FileNotFoundException。采用寫入數(shù)據(jù)到文件的方式,是【刪除寫】!!!文件內(nèi)容清空,在寫入數(shù)據(jù)

????????FileWriter(File file);????根據(jù)用戶指定的File類對象,創(chuàng)建對應(yīng)FileWriter文件操作字符輸出流對象,如果路徑不合法,拋出異常FileNotFoundException。采用寫入數(shù)據(jù)到文件的方式,是【刪除寫】!!!文件內(nèi)容清空,在寫入數(shù)據(jù)

????????FileWriter(String filePath, boolean append);????根據(jù)用戶指定的路徑,創(chuàng)建對應(yīng)的FileWriter文件操作字符輸出流對象。如果路徑不合法,拋出異常FileNotFoundException。append參數(shù)是boolean類型,如果傳入?yún)?shù)為true,表示【追加寫】,在文件末尾寫入數(shù)據(jù)

????????FileWriter(File file, boolean append);????根據(jù)用戶指定的File類對象,創(chuàng)建對應(yīng)FileWriter文件操作字符輸出流對象,如果路徑不合法,拋出異常FileNotFoundException。append參數(shù)是boolean類型,如果傳入?yún)?shù)為true,表示【追加寫】,在文件末尾寫入數(shù)據(jù)

? ? Method成員方法:

? ??????void write(int ch);????寫入一個(gè)字符數(shù)據(jù)寫入到文件中

????????void write(char[] buf);????寫入一個(gè)字符數(shù)組到文件中

????????void write(char[] buf, int off, int count);????寫入一個(gè)字符數(shù)組到文件中,要求從off偏移位置開始,計(jì)數(shù)count

????????void write(String str);????寫入一個(gè)字符串到文件中

????????void write(String str, int offset, int count);????寫入一個(gè)字符串到文件中,要求從offset偏移位置開始,計(jì)數(shù)count

? ??注意:

????????1. FileWriter擁有創(chuàng)建文件的能力,在路徑合法,且對應(yīng)目錄有寫入權(quán)限下可以創(chuàng)建文件

????????2. 區(qū)分刪除寫和追加寫

演示

8.關(guān)于字節(jié)流和字符流總結(jié)

? ? 1.套路是一樣的! 明確文件 - 打開管道 - 操作文件 - 關(guān)閉資源

? ? 2.核心方法? ? read 讀取,輸入;? ? write 寫入,輸出

? ? 3.輸出流有創(chuàng)建文件的能力

? ? 4.輸出流需要注意是刪除寫還是追加寫

? ? 5.一定要注意關(guān)閉資源!resource

9.文件拷貝對比

? ? 9.1 字符流字節(jié)流對比

????????????字節(jié)流拷貝:

字節(jié)流拷貝

????????????字符流拷貝:

字符流拷貝

? ??9.2字符流操作效率問題

? ? ? ????? 單字節(jié)拷貝操作:

單字節(jié)拷貝

? ??????????緩沖數(shù)組形式操作:

緩沖數(shù)組形式操作

? ??有緩沖和無緩沖對比:

? ? ? ? 1.在沒有使用緩沖的情況下,每一次需要向磁盤讀取一個(gè)字節(jié)數(shù)據(jù),然后寫入一個(gè)字節(jié)數(shù)據(jù),這樣會導(dǎo)致代碼中出現(xiàn)太多次數(shù)的打開和關(guān)閉磁盤次數(shù)。極大影響效率!

? ? ? ? 2.緩沖之后,我們降低了對于磁盤開啟的次數(shù),并且符合CPU操作磁盤的模式,CPU從磁盤讀取數(shù)據(jù)是每次4KB

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,278評論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,241評論 2 375