Java IO流學(xué)習(xí)總結(jié)

Java流操作有關(guān)的類或接口:

Java流類圖結(jié)構(gòu):

流的概念和作用

流是一組有順序的,有起點和終點的字節(jié)集合罪裹,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象乱灵。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流溯饵,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類背镇,方便更直觀的進(jìn)行數(shù)據(jù)操作咬展。

IO流的分類

根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流

根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流

字符流和字節(jié)流

字符流的由來: 因為數(shù)據(jù)編碼的不同,而有了對字符進(jìn)行高效操作的流對象瞒斩。本質(zhì)其實就是基于字節(jié)流讀取時破婆,去查了指定的碼表。 字節(jié)流和字符流的區(qū)別:

讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位胸囱,字符流以字符為單位祷舀,根據(jù)碼表映射字符,一次可能讀多個字節(jié)烹笔。

處理對象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片裳扯、avi等),而字符流只能處理字符類型的數(shù)據(jù)谤职。

結(jié)論:只要是處理純文本數(shù)據(jù)饰豺,就優(yōu)先考慮使用字符流。 除此之外都使用字節(jié)流允蜈。

輸入流和輸出流

對輸入流只能進(jìn)行讀操作冤吨,對輸出流只能進(jìn)行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流饶套。

Java IO流對象

1.輸入字節(jié)流InputStreamIO 中輸入字節(jié)流的繼承圖可見上圖漩蟆,可以看出:

InputStream 是所有的輸入字節(jié)流的父類,它是一個抽象類妓蛮。

ByteArrayInputStream怠李、StringBufferInputStream、FileInputStream 是三種基本的介質(zhì)流,它們分別從Byte 數(shù)組扔仓、StringBuffer褐奥、和本地文件中讀取數(shù)據(jù)。PipedInputStream 是從與其它線程共用的管道中讀取數(shù)據(jù)翘簇,與Piped 相關(guān)的知識后續(xù)單獨介紹撬码。

ObjectInputStream 和所有FilterInputStream 的子類都是裝飾流(裝飾器模式的主角)。

2.輸出字節(jié)流OutputStream

IO 中輸出字節(jié)流的繼承圖可見上圖版保,可以看出:

OutputStream 是所有的輸出字節(jié)流的父類呜笑,它是一個抽象類。

ByteArrayOutputStream彻犁、FileOutputStream 是兩種基本的介質(zhì)流叫胁,它們分別向Byte 數(shù)組、和本地文件中寫入數(shù)據(jù)汞幢。PipedOutputStream 是向與其它線程共用的管道中寫入數(shù)據(jù)驼鹅,

ObjectOutputStream 和所有FilterOutputStream 的子類都是裝飾流。

3.字節(jié)流的輸入與輸出的對應(yīng)

圖中藍(lán)色的為主要的對應(yīng)部分森篷,紅色的部分就是不對應(yīng)部分输钩。紫色的虛線部分代表這些流一般要搭配使用。從上面的圖中可以看出Java IO 中的字節(jié)流是極其對稱的仲智÷蚰耍“存在及合理”我們看看這些字節(jié)流中不太對稱的幾個類吧!

LineNumberInputStream 主要完成從流中讀取數(shù)據(jù)時钓辆,會得到相應(yīng)的行號剪验,至于什么時候分行、在哪里分行是由改類主動確定的前联,并不是在原始中有這樣一個行號功戚。在輸出部分沒有對應(yīng)的部分,我們完全可以自己建立一個LineNumberOutputStream蛀恩,在最初寫入時會有一個基準(zhǔn)的行號疫铜,以后每次遇到換行時會在下一行添加一個行號,看起來也是可以的双谆。好像更不入流了壳咕。

PushbackInputStream 的功能是查看最后一個字節(jié),不滿意就放入緩沖區(qū)顽馋。主要用在編譯器的語法谓厘、詞法分析部分。輸出部分的BufferedOutputStream 幾乎實現(xiàn)相近的功能寸谜。

StringBufferInputStream 已經(jīng)被Deprecated竟稳,本身就不應(yīng)該出現(xiàn)在InputStream 部分,主要因為String 應(yīng)該屬于字符流的范圍。已經(jīng)被廢棄了他爸,當(dāng)然輸出部分也沒有必要需要它了聂宾!還允許它存在只是為了保持版本的向下兼容而已。

SequenceInputStream 可以認(rèn)為是一個工具類诊笤,將兩個或者多個輸入流當(dāng)成一個輸入流依次讀取系谐。完全可以從IO 包中去除,還完全不影響IO 包的結(jié)構(gòu)讨跟,卻讓其更“純潔”――純潔的Decorator 模式纪他。

PrintStream 也可以認(rèn)為是一個輔助工具。主要可以向其他輸出流晾匠,或者FileInputStream 寫入數(shù)據(jù)茶袒,本身內(nèi)部實現(xiàn)還是帶緩沖的。本質(zhì)上是對其它流的綜合運用的一個工具而已凉馆。一樣可以踢出IO 包薪寓!System.out 和System.out 就是PrintStream 的實例!

4.字符輸入流Reader

在上面的繼承關(guān)系圖中可以看出:

Reader 是所有的輸入字符流的父類句喜,它是一個抽象類预愤。

CharReader沟于、StringReader 是兩種基本的介質(zhì)流咳胃,它們分別將Char 數(shù)組、String中讀取數(shù)據(jù)旷太。PipedReader 是從與其它線程共用的管道中讀取數(shù)據(jù)展懈。

BufferedReader 很明顯就是一個裝飾器,它和其子類負(fù)責(zé)裝飾其它Reader 對象供璧。

FilterReader 是所有自定義具體裝飾流的父類存崖,其子類PushbackReader 對Reader 對象進(jìn)行裝飾,會增加一個行號睡毒。

InputStreamReader 是一個連接字節(jié)流和字符流的橋梁来惧,它將字節(jié)流轉(zhuǎn)變?yōu)樽址鳌ileReader 可以說是一個達(dá)到此功能演顾、常用的工具類供搀,在其源代碼中明顯使用了將FileInputStream 轉(zhuǎn)變?yōu)镽eader 的方法。我們可以從這個類中得到一定的技巧钠至。Reader 中各個類的用途和使用方法基本和InputStream 中的類使用一致葛虐。后面會有Reader 與InputStream 的對應(yīng)關(guān)系。

5.字符輸出流Writer

在上面的關(guān)系圖中可以看出:

Writer 是所有的輸出字符流的父類棉钧,它是一個抽象類屿脐。

CharArrayWriter、StringWriter 是兩種基本的介質(zhì)流,它們分別向Char 數(shù)組的诵、String 中寫入數(shù)據(jù)万栅。PipedWriter 是向與其它線程共用的管道中寫入數(shù)據(jù),

BufferedWriter 是一個裝飾器為Writer 提供緩沖功能西疤。

PrintWriter 和PrintStream 極其類似申钩,功能和使用也非常相似。

OutputStreamWriter 是OutputStream 到Writer 轉(zhuǎn)換的橋梁瘪阁,它的子類FileWriter 其實就是一個實現(xiàn)此功能的具體類(具體可以研究一SourceCode)撒遣。功能和使用和OutputStream 極其類似,后面會有它們的對應(yīng)圖管跺。

6.字符流的輸入與輸出的對應(yīng)

7.字符流與字節(jié)流轉(zhuǎn)換

轉(zhuǎn)換流的特點:

其是字符流和字節(jié)流之間的橋梁

可對讀取到的字節(jié)數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字符

可對讀取到的字符數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字節(jié)

何時使用轉(zhuǎn)換流义黎?

當(dāng)字節(jié)和字符之間有轉(zhuǎn)換動作時;

流操作的數(shù)據(jù)需要編碼或解碼時豁跑。

具體的對象體現(xiàn):

InputStreamReader:字節(jié)到字符的橋梁

OutputStreamWriter:字符到字節(jié)的橋梁

這兩個流對象是字符體系中的成員廉涕,它們有轉(zhuǎn)換作用,本身又是字符流艇拍,所以在構(gòu)造的時候需要傳入字節(jié)流對象進(jìn)來狐蜕。

8.File類

File類是對文件系統(tǒng)中文件以及文件夾進(jìn)行封裝的對象,可以通過對象的思想來操作文件和文件夾卸夕。 File類保存文件或目錄的各種元數(shù)據(jù)信息层释,包括文件名、文件長度快集、最后修改時間贡羔、是否可讀、獲取當(dāng)前文件的路徑名个初,判斷指定文件是否存在乖寒、獲得當(dāng)前目錄中的文件列表,創(chuàng)建院溺、刪除文件和目錄等方法楣嘁。

9.RandomAccessFile類

該對象并不是流體系中的一員,其封裝了字節(jié)流珍逸,同時還封裝了一個緩沖區(qū)(字符數(shù)組)逐虚,通過內(nèi)部的指針來操作字符數(shù)組中的數(shù)據(jù)。 該對象特點:

該對象只能操作文件弄息,所以構(gòu)造函數(shù)接收兩種類型的參數(shù):a.字符串文件路徑痊班;b.File對象。

該對象既可以對文件進(jìn)行讀操作摹量,也能進(jìn)行寫操作涤伐,在進(jìn)行對象實例化時可指定操作模式(r,rw)

注意:該對象在實例化時馒胆,如果要操作的文件不存在卡儒,會自動創(chuàng)建阐肤;如果文件存在窗看,寫數(shù)據(jù)未指定位置什燕,會從頭開始寫,即覆蓋原有的內(nèi)容糕殉。可以用于多線程下載或多個線程同時寫數(shù)據(jù)到文件奕锌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挤茄,一起剝皮案震驚了整個濱河市山害,隨后出現(xiàn)的幾起案子纠俭,更是在濱河造成了極大的恐慌,老刑警劉巖浪慌,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冤荆,死亡現(xiàn)場離奇詭異,居然都是意外死亡权纤,警方通過查閱死者的電腦和手機钓简,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汹想,“玉大人外邓,你說我怎么就攤上這事」盘停” “怎么了损话?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冗茸。 經(jīng)常有香客問我席镀,道長,這世上最難降的妖魔是什么夏漱? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮顶捷,結(jié)果婚禮上挂绰,老公的妹妹穿的比我還像新娘。我一直安慰自己服赎,他們只是感情好葵蒂,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著重虑,像睡著了一般践付。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缺厉,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天永高,我揣著相機與錄音隧土,去河邊找鬼。 笑死命爬,一個胖子當(dāng)著我的面吹牛曹傀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饲宛,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼皆愉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艇抠?” 一聲冷哼從身側(cè)響起幕庐,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎家淤,沒想到半個月后翔脱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡媒鼓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年届吁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绿鸣。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疚沐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潮模,到底是詐尸還是另有隱情亮蛔,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布擎厢,位于F島的核電站究流,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏动遭。R本人自食惡果不足惜芬探,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厘惦。 院中可真熱鬧偷仿,春花似錦、人聲如沸宵蕉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羡玛。三九已至别智,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稼稿,已是汗流浹背薄榛。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工讳窟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛇数。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓挪钓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耳舅。 傳聞我的和親對象是個殘疾皇子碌上,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • Java流操作有關(guān)的類或接口: Java流類圖結(jié)構(gòu): 流的概念和作用 流是一組有順序的,有起點和終點的字節(jié)集合浦徊,是...
    zjk_00閱讀 777評論 0 1
  • tags:io categories:總結(jié) date: 2017-03-28 22:49:50 不僅僅在JAVA領(lǐng)...
    行徑行閱讀 2,178評論 0 3
  • 概述: 1馏予、IO流:即Input Output的縮寫。 2盔性、特點:1)IO流用來處理設(shè)備間的數(shù)據(jù)傳輸霞丧。2)Java...
    玉圣閱讀 1,255評論 0 3
  • 連續(xù)幾個月都被這個“集美麗與才華為一身的女子”狂轟亂炸,什么上線不到半年積累上百萬粉絲冕香,什么背景大挖掘papi醬沒...
    7日晗閱讀 934評論 10 8
  • 美好初見:被我叫叔叔的男子才二十一歲 我叫銀蛹尝,二十歲,是一位剛從財校畢業(yè)的學(xué)生悉尾。毫無意外突那,我被分到了鎮(zhèn)財務(wù)室。 報...
    簡小淇閱讀 187評論 2 2