流是個(gè)抽象的概念,是對(duì)輸入輸出設(shè)備的抽象,java程序中,對(duì)于數(shù)據(jù)的輸入/輸出操作都是以“流”的方式進(jìn)行。設(shè)備可以是文件,網(wǎng)絡(luò),內(nèi)存等。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)豐寧,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220
流具有方向性,至于是輸入流還是輸出流則是一個(gè)相對(duì)的概念,一般以程序?yàn)閰⒖迹绻麛?shù)據(jù)的流向是程序至設(shè)備,我們成為輸出流,反之我們稱(chēng)為輸入流。
可以將流想象成一個(gè)“水流管道”,水流就在這管道中形成了,自然就出現(xiàn)了方向的概念。
當(dāng)程序需要從某個(gè)數(shù)據(jù)源讀入數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)輸入流,數(shù)據(jù)源可以是文件、內(nèi)存或網(wǎng)絡(luò)等等。相反地,需要寫(xiě)出數(shù)據(jù)到某個(gè)數(shù)據(jù)源目的地的時(shí)候,也會(huì)開(kāi)啟一個(gè)輸出流,這個(gè)數(shù)據(jù)源目的地也可以是文件、內(nèi)存或網(wǎng)絡(luò)等等。
可以從不同的角度對(duì)流進(jìn)行分類(lèi):
1.
處理的數(shù)據(jù)單位不同,可分為:字符流,字節(jié)流
2.數(shù)據(jù)流方向不同,可分為:輸入流,輸出流
3.功能不同,可分為:節(jié)點(diǎn)流,處理流
1.
和
2.
都比較好理解,對(duì)于根據(jù)功能分類(lèi)的,可以這么理解:
節(jié)點(diǎn)流:節(jié)點(diǎn)流從一個(gè)特定的數(shù)據(jù)源讀寫(xiě)數(shù)據(jù)。即節(jié)點(diǎn)流是直接操作文件,網(wǎng)絡(luò)等的流,例如fileinputstream和fileoutputstream,他們直接從文件中讀取或往文件中寫(xiě)入字節(jié)流。
處理流:“連接”在已存在的流(節(jié)點(diǎn)流或處理流)之上通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫(xiě)功能。過(guò)濾流是
使用一個(gè)已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的,過(guò)濾流就是對(duì)節(jié)點(diǎn)流進(jìn)行一系列的包裝。例如bufferedinputstream和
bufferedoutputstream,使用已經(jīng)存在的節(jié)點(diǎn)流來(lái)構(gòu)造,提供帶緩沖的讀寫(xiě),提高了讀寫(xiě)的效率,以及datainputstream和
dataoutputstream,使用已經(jīng)存在的節(jié)點(diǎn)流來(lái)構(gòu)造,提供了讀寫(xiě)java中的基本數(shù)據(jù)類(lèi)型的功能。他們都屬于過(guò)濾流。
來(lái)源:
在我們電腦里運(yùn)行的都是二進(jìn)制的字節(jié)碼,一切的東西如果要經(jīng)過(guò)cpu的話 都要變?yōu)槎M(jìn)制的字節(jié)碼,在我們用到流時(shí),都會(huì)給cpu一個(gè)指令 等待他的調(diào)用,所謂的對(duì)象流 就是在我們的程序中去傳一個(gè)對(duì)象,流化就是將對(duì)象先轉(zhuǎn)為字節(jié)碼 而不是字符串 轉(zhuǎn)為二進(jìn)制的字節(jié)碼之后 經(jīng)過(guò)cpu的調(diào)用(有些是編譯器自身的編譯)然后在由可識(shí)別它的工具將她轉(zhuǎn)換為所需要的信息 比如字符串
希望我說(shuō)的有助于你理解
流的概念:流分為字節(jié)流、字符流(數(shù)據(jù)類(lèi)型);輸入流、輸出流(數(shù)據(jù)方向);節(jié)點(diǎn)流、處理流(數(shù)據(jù)功能)。
三種分類(lèi)是根據(jù)不同的概念來(lái)劃分的;流有四個(gè)抽象類(lèi):InputStream 、OutputStream、Reader、Writer;其中前兩個(gè)是字節(jié)流處理時(shí)候是通過(guò)輸入或輸出字節(jié)形式的;后面兩個(gè)是通過(guò)字符來(lái)處理的讀取或?qū)懭朊總€(gè)字符;在java中輸入輸出寫(xiě)入讀取是從程序的方向上去辨別的,這一點(diǎn)不要搞混了。
什么是節(jié)點(diǎn)流?
簡(jiǎn)單的例子:比如說(shuō)從某個(gè)文件中讀取數(shù)據(jù)把這個(gè)文件當(dāng)做一個(gè)大桶,現(xiàn)在用個(gè)管道直接連接在這個(gè)大桶上進(jìn)行抽水此時(shí)這跟管道就是節(jié)點(diǎn)流;當(dāng)感覺(jué)這個(gè)管道不夠抽水用的了,在其外面套上一個(gè)大的抽水管道,此時(shí)這個(gè)大的管道就相當(dāng)于處理流;