java io流_浅谈IO流(一)-流的基本概念以及java的常见流
對(duì)于任何程序設(shè)計(jì)語言而言,輸入輸出(Input/Output)系統(tǒng)都是非常核心的功能。程序運(yùn)行需要數(shù)據(jù),數(shù)據(jù)的獲取往往需要跟外部系統(tǒng)進(jìn)行通信,外部系統(tǒng)可能是文件、數(shù)據(jù)庫、其他程序、網(wǎng)絡(luò)、IO設(shè)備等等。外部系統(tǒng)比較復(fù)雜多變,那么我們有必要通過某種手段進(jìn)行抽象、屏蔽外部的差異,從而實(shí)現(xiàn)更加便捷的編程。
輸入(Input)指的是:可以讓程序從外部系統(tǒng)獲得數(shù)據(jù)(核心含義是“讀”,讀取外部數(shù)據(jù))。常見的應(yīng)用:
? 讀取硬盤上的文件內(nèi)容到程序。例如:播放器打開一個(gè)視頻文件、word打開一個(gè)doc文件。
? 讀取網(wǎng)絡(luò)上某個(gè)位置內(nèi)容到程序。例如:瀏覽器中輸入網(wǎng)址后,打開該網(wǎng)址對(duì)應(yīng)的網(wǎng)頁內(nèi)容;下載網(wǎng)絡(luò)上某個(gè)網(wǎng)址的文件。
? 讀取數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)到程序。
? 讀取某些硬件系統(tǒng)數(shù)據(jù)到程序。例如:車載電腦讀取雷達(dá)掃描信息到程序;溫控系統(tǒng)等。
輸出(Output)指的是:程序輸出數(shù)據(jù)給外部系統(tǒng)從而可以操作外部系統(tǒng)(核心含義是“寫”,將數(shù)據(jù)寫出到外部系統(tǒng))。常見的應(yīng)用有:
? 將數(shù)據(jù)寫到硬盤中。例如:我們編輯完一個(gè)word文檔后,將內(nèi)容寫到硬盤上進(jìn)行保存。
? 將數(shù)據(jù)寫到數(shù)據(jù)庫系統(tǒng)中。例如:我們注冊(cè)一個(gè)網(wǎng)站會(huì)員,實(shí)際就是后臺(tái)程序向數(shù)據(jù)庫中寫入一條記錄。
? 將數(shù)據(jù)寫到某些硬件系統(tǒng)中。例如:導(dǎo)彈系統(tǒng)導(dǎo)航程序?qū)⑿碌穆窂捷敵龅斤w控子系統(tǒng),飛控子系統(tǒng)根據(jù)數(shù)據(jù)修正飛行路徑。
數(shù)據(jù)源:
數(shù)據(jù)源data source,提供數(shù)據(jù)的原始媒介。常見的數(shù)據(jù)源有:數(shù)據(jù)庫、文件、其他程序、內(nèi)存、網(wǎng)絡(luò)連接、IO設(shè)備。如圖10-1所示。
數(shù)據(jù)源分為:源設(shè)備、目標(biāo)設(shè)備。
1. 源設(shè)備:為程序提供數(shù)據(jù),一般對(duì)應(yīng)輸入流。
2. 目標(biāo)設(shè)備:程序數(shù)據(jù)的目的地,一般對(duì)應(yīng)輸出流。
數(shù)據(jù)源示意圖
流的概念:
流是一個(gè)抽象、動(dòng)態(tài)的概念,是一連串連續(xù)動(dòng)態(tài)的數(shù)據(jù)集合。
對(duì)于輸入流而言,數(shù)據(jù)源就像水箱,流(stream)就像水管中流動(dòng)著的水流,程序就是我們最終的用戶。我們通過流(A Stream)將數(shù)據(jù)源(Source)中的數(shù)據(jù)(information)輸送到程序(Program)中。
對(duì)于輸出流而言,目標(biāo)數(shù)據(jù)源就是目的地(dest),我們通過流(A Stream)將程序(Program)中的數(shù)據(jù)(information)輸送到目的數(shù)據(jù)源(dest)中。
流與源數(shù)據(jù)源和目標(biāo)數(shù)據(jù)源之間的關(guān)系
注意:
輸入/輸出流的劃分是相對(duì)程序而言的,并不是相對(duì)數(shù)據(jù)源。
Java為我們提供了多種多樣的IO流,我們可以根據(jù)不同的功能及性能要求挑選合適的IO流,如下圖所示,為Java中IO流類的體系。
注:這里只列出常用的類,詳情可以參考JDK API文檔。粗體標(biāo)注為常用!
Java中的IO流體系
從上圖發(fā)現(xiàn),很多流都是成對(duì)出現(xiàn)的,比如:FileInputStream/FileOutputStream,顯然是對(duì)文件做輸入和輸出操作的。我們下面簡(jiǎn)單做個(gè)總結(jié):
1. InputStream/OutputStream
字節(jié)流的抽象類。
2. Reader/Writer
字符流的抽象類。
3. FileInputStream/FileOutputStream
節(jié)點(diǎn)流:以字節(jié)為單位直接操作“文件”。
4. ByteArrayInputStream/ByteArrayOutputStream
節(jié)點(diǎn)流:以字節(jié)為單位直接操作“字節(jié)數(shù)組對(duì)象”。
5. ObjectInputStream/ObjectOutputStream
處理流:以字節(jié)為單位直接操作“對(duì)象”。
6. DataInputStream/DataOutputStream
處理流:以字節(jié)為單位直接操作“基本數(shù)據(jù)類型與字符串類型”。
7. FileReader/FileWriter
節(jié)點(diǎn)流:以字符為單位直接操作“文本文件”(注意:只能讀寫文本文件)。
8. BufferedReader/BufferedWriter
處理流:將Reader/Writer對(duì)象進(jìn)行包裝,增加緩存功能,提高讀寫效率。
9. BufferedInputStream/BufferedOutputStream
處理流:將InputStream/OutputStream對(duì)象進(jìn)行包裝,增加緩存功能,提高 讀寫效率。
10. InputStreamReader/OutputStreamWriter
處理流:將字節(jié)流對(duì)象轉(zhuǎn)化成字符流對(duì)象。
11. PrintStream
處理流:將OutputStream進(jìn)行包裝,可以方便地輸出字符,更加靈活。
------------------注:此并非作者原創(chuàng),引自尚學(xué)堂文檔,若有興趣可報(bào)名尚學(xué)堂
------------------------------------------------------------------------百戰(zhàn)卓越028天
總結(jié)
以上是生活随笔為你收集整理的java io流_浅谈IO流(一)-流的基本概念以及java的常见流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript笔记-点击butto
- 下一篇: dedecms二次开发常用代码