流是一組有順序的陕凹,有起點(diǎn)和終點(diǎn)的字節(jié)集合悍抑,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q(chēng)或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱(chēng)為流杜耙,流的本質(zhì)是數(shù)據(jù)傳輸搜骡,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類(lèi),方便更直觀的進(jìn)行數(shù)據(jù)操作佑女。
一记靡、流的基本概念:
流是一個(gè)抽象,動(dòng)態(tài)的概念团驱,是一連串連續(xù)動(dòng)態(tài)的數(shù)據(jù)集合摸吠。
舉例:
數(shù)據(jù)源就想水箱,流就像水管中流著的水流店茶,程序就是我們最終的用戶(hù)蜕便。
二、IO流的概念:
三贩幻、IO流的分類(lèi)。
根據(jù)處理數(shù)據(jù)類(lèi)型的不同分為:字符流和字節(jié)流两嘴。
根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流丛楚。
四、字節(jié)流與字符流憔辫。
字節(jié)流:一次讀入或讀出是8位二進(jìn)制趣些。
字符流:一次讀入或讀出是16位二進(jìn)制。
字節(jié)流和字符流的原理是相同的贰您,只不過(guò)處理的單位不同而已坏平。后綴是Stream是字節(jié)流,而后綴是Reader锦亦,Writer是字符流舶替。
五、字節(jié)流和字符流的區(qū)別杠园。
(1)讀寫(xiě)單位不同:字節(jié)流以字節(jié)(8bit)為單位顾瞪,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié)陈醒。
(2)處理對(duì)象不同:字節(jié)流能處理所有類(lèi)型的數(shù)據(jù)(如圖片惕橙、avi等),而字符流只能處理字符類(lèi)型的數(shù)據(jù)钉跷。
(3)字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)的弥鹦,是文件本身的直接操作的;而字符流在操作的時(shí)候下后是會(huì)用到緩沖區(qū)的爷辙,是通過(guò)緩沖區(qū)來(lái)操作文件彬坏,我們將在下面驗(yàn)證這一點(diǎn)。
結(jié)論:優(yōu)先選用字節(jié)流犬钢。首先因?yàn)橛脖P(pán)上的所有文件都是以字節(jié)的形式進(jìn)行傳輸或者保存的苍鲜,包括圖片等內(nèi)容。但是字符只是在內(nèi)存中才會(huì)形成的玷犹,所以在開(kāi)發(fā)中混滔,字節(jié)流使用廣泛。
六歹颓、字符流和字節(jié)流坯屿。
字符流的由來(lái): 因?yàn)閿?shù)據(jù)編碼的不同,而有了對(duì)字符進(jìn)行高效操作的流對(duì)象巍扛。本質(zhì)其實(shí)就是基于字節(jié)流讀取時(shí)领跛,去查了指定的碼表。
輸入流和輸出流
對(duì)輸入流只能進(jìn)行讀操作撤奸,對(duì)輸出流只能進(jìn)行寫(xiě)操作吠昭,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。
七胧瓜、Jdk提供的流繼承了四大類(lèi):
InputStream(字節(jié)輸入流)矢棚,
OutputStream(字節(jié)輸出流),
Reader(字符輸入流)府喳,
Writer(字符輸出流)蒲肋。
八、輸入字節(jié)流InputStream钝满。
InputStream 是所有的輸入字節(jié)流的父類(lèi)兜粘,它是一個(gè)抽象類(lèi)。
ByteArrayInputStream弯蚜、StringBufferInputStream孔轴、FileInputStream 是三種基本的介質(zhì)流,它們分別從Byte 數(shù)組熟吏、StringBuffer距糖、和本地文件中讀取數(shù)據(jù)玄窝。
close():關(guān)閉stream方法,這個(gè)是每次在用完流之后必須調(diào)用的方法悍引。
read():方法是讀取一個(gè)byte字節(jié),但是返回的是int恩脂。
read(byte[]):一次性讀取內(nèi)容到緩沖字節(jié)數(shù)組
read(byte[],int, int):從數(shù)據(jù)流中的哪個(gè)位置offset開(kāi)始讀長(zhǎng)度為len的內(nèi)容到緩沖字節(jié)數(shù)組
1)FileInputStream
該流用于從文件讀取數(shù)據(jù),它的對(duì)象可以用關(guān)鍵字new來(lái)創(chuàng)建趣斤。
有多種構(gòu)造方法可用來(lái)創(chuàng)建對(duì)象俩块。
可以使用字符串類(lèi)型的文件名來(lái)創(chuàng)建一個(gè)輸入流對(duì)象來(lái)讀取文件:
InputStream f=new FileInputStream(“C:/Java/hello”);
也可以使用一個(gè)文件對(duì)象來(lái)創(chuàng)建一個(gè)輸入流對(duì)象來(lái)讀取文件。我們首先得使用File()方法來(lái)創(chuàng)建一個(gè)文件對(duì)象:
File file=new File(“C:/Java/hello”);
InputStream in=new FileInputStream(file);
使用FileInputStream讀取文本文件:
九浓领、輸出字節(jié)流OutputStream玉凯。