IO流

一.IO流概念原理

1.在Java程序中器予,對于數(shù)據(jù)的輸入/輸出操作以“流” (stream) 方式進(jìn)行违帆;

2。J2SDK提供了各種各樣的“流”類莽鸭,用以獲取不同種類的數(shù)據(jù)吗伤;程序中通過標(biāo)準(zhǔn)的方法輸入或輸出數(shù)據(jù)。

3.Java的流類型一般位于http://java.io包中

二.流的分類

1.流的方向

輸入流:數(shù)據(jù)源流到程序(InputStream? Reader讀進(jìn)來)

輸出流:程序流到目的地(OutputStream? Writer寫出去)

2. 處理數(shù)據(jù)單元

字節(jié)流:按照字節(jié)讀取數(shù)據(jù)(InputStream OutputStream)

字符流:按照字符讀取數(shù)據(jù)(Reader Writer)

3. 功能不同

節(jié)點流:可以直接從數(shù)據(jù)源或目的地讀寫數(shù)據(jù)

處理流:不能直接連接到數(shù)據(jù)源或者目的地硫眨,是其他流進(jìn)行封裝足淆。目的是簡化操作和提高性能。

三.節(jié)點流和處理流的關(guān)系

1.節(jié)點流處于io操作的第一線礁阁,所有操作必須通過他們進(jìn)行;

2.處理流可以對其他流進(jìn)行處理(提高效率或操作靈活性).

四.IO流體系

1.InputStream和OutputStream

Java語言中最基本的兩個字節(jié)輸入輸出類姥闭。其他所有字節(jié)輸入輸出流類都繼承自這兩個基類。這兩個類都是抽象類棚品,不能創(chuàng)建它們的實例靠欢,只能使用它們的子類.

2. Reader和Writer

Java語言中最基本的兩個字符輸入輸出類门怪。其他所有字符輸入輸出流類都繼承自這兩個基類。這兩個類都是抽象類锅纺,不能創(chuàng)建它們的實例,只能使用它們的子類.

五.文件字節(jié)流

1.FileInputStream/FileOutputStream

概念:

FileInputStream通過字節(jié)的方式讀取文件,適合讀取所有類型的文件(圖像护锤、視頻、文本文件等)酿傍。Java也提供了FileReader專門讀取文本文件。

FileOutputStream 通過字節(jié)的方式寫數(shù)據(jù)到文件中拧粪,適合所有類型的文件沧侥。Java也提供了FileWriter專門寫入文本文件可霎。

方法:使用FileInputStream讀取文件內(nèi)容

1.abstract int read( );

2.int read( byte b[ ] );

3.int read( byte b[ ], int off, int len );

4.int available( );

5.close( );

使用FileOutputStream寫內(nèi)容到文件

1.abstract void write( int b );

2.void write( byte b[ ] );

3.void write( byte b[ ], int off, int len );

4.void flush( );

5.void close( );

六.文件字符流Reader/Writer

為什么要使用字符流:文件字節(jié)流可以處理所有的文件宴杀,但是字節(jié)流不能很好的處理Unicode字符癣朗,經(jīng)常會出現(xiàn)“亂碼”現(xiàn)象。所以旺罢,我們處理文本文件旷余,一般可以使用文件字符流,它以字符為單位進(jìn)行操作

方法使用Reader讀取文件內(nèi)容

1.int read( );

2.int read( char [ ]cbuf );

3.int read( char [ ]cbuf, int off, int len );

4.int available( );

5.close( );

使用Writer寫內(nèi)容到文件

1.void write( int c );

2.void write( char[]cbuf);

3.abstract void write( char [ ]cbuf, int off, int len );

4.void write(String str);

5.abstract void flush( );

6.void close( );

七.緩沖字節(jié)流_緩沖字符流

BufferedInputStream和BufferedOutputStream是處理流(包裝流)

作用:

讀文件和寫文件都使用了緩沖區(qū)扁达,減少了讀寫次數(shù)正卧,從而提高了效率

當(dāng)創(chuàng)建這兩個緩沖流的對象時時,會創(chuàng)建了內(nèi)部緩沖數(shù)組跪解,缺省使用32字節(jié)大小的緩沖區(qū).

當(dāng)讀取數(shù)據(jù)時炉旷,數(shù)據(jù)按塊讀入緩沖區(qū),其后的讀操作則直接訪問緩沖區(qū)

當(dāng)寫入數(shù)據(jù)時叉讥,首先寫入緩沖區(qū)窘行,當(dāng)緩沖區(qū)滿時,其中的數(shù)據(jù)寫入所連接的輸出流图仓。使用方法flush()可以強(qiáng)制將緩沖區(qū)的內(nèi)容全部寫入輸出流

關(guān)閉流的順序和打開流的順序相反.只要關(guān)閉高層流即可罐盔,關(guān)閉高層流其實關(guān)閉的底層節(jié)點流

Flush的使用:手動將buffer中內(nèi)容寫入文件

緩沖字符流

1.BufferedReader? ? ? ? readLine() 讀取一個文本行的數(shù)據(jù)

2.BufferedWriter? ? ? ? ? newLine();寫入一個行分隔符救崔。

使用緩沖字符流是復(fù)制文本文件常用的方式

八.轉(zhuǎn)換流InputStreamReader和OutputStreamWriter

作用:處理流? ? ? 用于將字節(jié)流轉(zhuǎn)化成字符流惶看,字符流與字節(jié)流之間的橋梁

InputStreamReader的作用是把InputStream轉(zhuǎn)換成Reader

OutputStreamWriter的作用是把OutputStream轉(zhuǎn)換成Writer

九.打印流PrintStream與PrintWriter

特點:PrintStream

1.PrintStream提供了一系列的print()和println(),可以實現(xiàn)將基本數(shù)據(jù)類型格式化成字符串輸出六孵。對象類型將先調(diào)用toString()碳竟,然后輸出該方法返回的字符串

2.System.out就是PrintStream的一個實例,代表顯示器

3.System.err 也是PrintStream的一個實例狸臣,代表顯示器

4.PrintStream的輸出功能非常強(qiáng)大莹桅,通常需要輸出文本內(nèi)容,都可以將輸出流包裝成PrintStream后進(jìn)行輸出

5.PrintStream的方法都不拋出IOException

PrintReader

1.PrintStream的對應(yīng)字符流,功能相同诈泼,方法對應(yīng)懂拾。

2.PrintWriter的方法也不拋出IOException

3.復(fù)制文件時可以使用PrintWriter代替BufferedWriter完成,更簡單

十.數(shù)據(jù)流DataInputStream和DataOutputStream

作用:數(shù)據(jù)流將“基本數(shù)據(jù)類型與字符串類型”作為數(shù)據(jù)源铐达,從而允許程序以與機(jī)器無關(guān)的方式從底層輸入輸出流中操作Java基本數(shù)據(jù)類型與字符串類型岖赋。

特點:

1.提供了可以存取所有Java基礎(chǔ)類型數(shù)據(jù)(如:int,double 等)和String的方法瓮孙。

2.處理流唐断,只針對字節(jié)流,二進(jìn)制文件

3.輸入流鏈和輸出流鏈

注意:只要關(guān)閉上層流即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杭抠,一起剝皮案震驚了整個濱河市脸甘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偏灿,老刑警劉巖丹诀,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翁垂,居然都是意外死亡铆遭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門枚荣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橄妆,“玉大人疟游,你說我怎么就攤上這事÷” “怎么了另绩?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵笋籽,是天一觀的道長。 經(jīng)常有香客問我笛园,道長,這世上最難降的妖魔是什么埋同? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任凶赁,我火速辦了婚禮逆甜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咏窿。我一直安慰自己翰灾,他們只是感情好稚茅,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布亚享。 她就那樣靜靜地躺著绘面,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晚凿。 梳的紋絲不亂的頭發(fā)上瘦馍,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天情组,我揣著相機(jī)與錄音,去河邊找鬼肆氓。 笑死底瓣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拨扶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼村视,長吁一口氣:“原來是場噩夢啊……” “哼蚁孔!你這毒婦竟也來了惋嚎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼻百,失蹤者是張志新(化名)和其女友劉穎摆尝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勺爱,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡琐鲁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年人灼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奈泪。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跪呈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苹支,到底是詐尸還是另有隱情误阻,我是刑警寧澤晴埂,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布儒洛,位于F島的核電站狼速,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恼蓬。R本人自食惡果不足惜僵芹,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荷辕。 院中可真熱鬧件豌,春花似錦、人聲如沸案站。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至险污,卻和暖如春富岳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚁飒。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工萝喘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留琼懊,地道東北人哼丈。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓醉旦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親髓抑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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