什么是IO,Input和Output,即輸入和輸出。
電腦相關(guān)的IO設(shè)備:和電腦通信的設(shè)備,此時(shí)要站在電腦的角度,把信息傳遞給電腦叫輸入設(shè)備,把電腦信息傳遞出來(lái)的叫輸出設(shè)備。
輸入設(shè)備:麥克風(fēng)、掃描器、鍵盤、鼠標(biāo)等
輸出設(shè)備:顯示器、打印機(jī)、投影儀、耳機(jī)、音響等
為什么程序需要IO呢?
案例1:打游戲操作,需要存儲(chǔ)游戲的信息。
此時(shí)需要把游戲中的數(shù)據(jù)存儲(chǔ)起來(lái),數(shù)據(jù)只能存儲(chǔ)在文件中。
案例2:打游戲操作,需求讀取之前游戲的記錄信息,數(shù)據(jù)存儲(chǔ)在一個(gè)文件中的。
此時(shí)游戲程序需要去讀取文件中的數(shù)據(jù),并顯示在游戲中。
IO操作是一個(gè)相對(duì)的過(guò)程,一般的,我們?cè)诔绦蚪嵌葋?lái)思考(程序的內(nèi)存)。
程序需要讀取數(shù)據(jù):文件——>程序,輸入操作
程序需要保存數(shù)據(jù):程序——>文件,輸出操作
1.1.2.IO操作示意圖(了解)
講解IO知識(shí)點(diǎn)的時(shí)候,習(xí)慣和生活中的水流聯(lián)系起來(lái),一起來(lái)看看復(fù)古的水井和水缸。
此時(shí)站在水缸的角度,分析IO的操作方向:
輸入操作:水井——>水缸
輸出操作:水缸——>飯鍋
注意:誰(shuí)擁有數(shù)據(jù),誰(shuí)就是源,把數(shù)據(jù)流到哪里,哪里就是目標(biāo)。那么,請(qǐng)問(wèn)水缸是源還是目標(biāo)。
1.1.3.流的分類(掌握)
根據(jù)流的不同特性,流的劃分是不一樣的,一般按照如下情況來(lái)考慮:
按流動(dòng)方向:分為輸入流和輸出流
按數(shù)據(jù)傳輸單位:分為字節(jié)流和字符流,即每次傳遞一個(gè)字節(jié)(byte)或一個(gè)字符(char)
按功能上劃分:分為節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流功能單一,處理流功能更強(qiáng)
流的流向是相對(duì)的,我們一般站在程序的角度:
程序需要數(shù)據(jù)→把數(shù)據(jù)讀進(jìn)來(lái)→輸入操作(read):讀進(jìn)來(lái)
程序保存數(shù)據(jù)→把數(shù)據(jù)寫出去→輸出操作(write):寫出去
六字箴言:讀進(jìn)來(lái),寫出去(仔細(xì)揣摩這六個(gè)字有什么高深的含義)
1.1.4.四大基流
操作IO流的模板:
1):創(chuàng)建源或者目標(biāo)對(duì)象(挖井).
輸入操作:把文件中的數(shù)據(jù)流向到程序中,此時(shí)文件是源,程序是目標(biāo).
輸出操作:把程序中的數(shù)據(jù)流向到文件中,此時(shí)文件是目標(biāo),程序是源.
2):創(chuàng)建IO流對(duì)象(水管).
輸入操作:創(chuàng)建輸入流對(duì)象.
輸出操作:創(chuàng)建輸出流對(duì)象.
3):具體的IO操作.
輸入操作:輸入流對(duì)象的read方法.
輸出操作:輸出流對(duì)象的write方法.
4):關(guān)閉資源(勿忘).一旦資源關(guān)閉之后,就不能使用流對(duì)象了,否則報(bào)錯(cuò).
輸入操作:輸入流對(duì)象.close();
輸出操作:輸出流對(duì)象.close();
注意:
四大抽象流是不能創(chuàng)建對(duì)象的,一般的我們根據(jù)不同的需求創(chuàng)建他們不同的子類對(duì)象,比如操作文件時(shí)就使用文件流。
不管是什么流,操作完畢都必須調(diào)用close方法,釋放資源。
1.1.4.1.InputStream(字節(jié)輸入流)
類的聲明為:publicabstractclassInputStreamextendsObjectimplementsCloseable,表示字節(jié)輸入流的所有類的超類。
常用方法:
publicvoidclose()throwsIOException:關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。InputStream的close方法不執(zhí)行任何操作。
publicabstractintread()throwsIOException:從輸入流中讀取一個(gè)字節(jié)數(shù)據(jù)并返回該字節(jié)數(shù)據(jù),如果到達(dá)流的末尾,則返回-1。
publicintread(byte[]buff)throwsIOException:從輸入流中讀取多個(gè)字節(jié)數(shù)據(jù),并存儲(chǔ)在緩沖區(qū)數(shù)組buff中。返回已讀取的字節(jié)數(shù)量,如果已到達(dá)流的末尾,則返回-1。
1.1.4.2.OutputStream(字節(jié)輸出流)
類的聲明為:publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable,表示字節(jié)輸出流的所有類的超類。
常用方法:
publicvoidclose()throwsIOException:關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。
publicabstractvoidwrite(intb)throwsIOException:將指定的一個(gè)字節(jié)數(shù)據(jù)b寫入到輸出流中。
publicvoidwrite(byte[]buff)throwsIOException:把數(shù)組buff中所有字節(jié)數(shù)據(jù)寫入到輸出流中。
publicvoidwrite(byte[]b,intoff,intlen)throwsIOException:把數(shù)組buff中從索引off開(kāi)始的len個(gè)字節(jié)寫入此輸出流中。
1.1.4.3.Reader(字符輸入流)
類的聲明為:publicabstractclassReaderextendsObjectimplementsReadable,Closeable,表示字符輸入流的所有類的超類。
常用方法:
publicabstractvoidclose()throwsIOException:關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。
publicintread()throwsIOException:從輸入流中讀取一個(gè)字符數(shù)據(jù)并返回該字符數(shù)據(jù),如果到達(dá)流的末尾,則返回-1。
publicintread(char[]cbuf)throwsIOException:從輸入流中讀取多個(gè)字符,并存儲(chǔ)在緩沖區(qū)數(shù)組cbuf中。返回已讀取的字符數(shù),如果已到達(dá)流的末尾,則返回-1。
1.1.4.4.Writer(字符輸出流)
類的聲明為:publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable,表示字符輸出流的所有類的超類。
常用方法:
publicabstractvoidflush()throwsIOException:刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字符。
publicabstractvoidclose()throwsIOException:關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。
publicvoidwrite(intc)throwsIOException:將指定的一個(gè)字符數(shù)據(jù)c寫入到輸出流中。
publicvoidwrite(char[]cbuf)throwsIOException:把數(shù)組cbuf中cbuf.length個(gè)字符數(shù)據(jù)寫入到輸出流中。
publicabstractvoidwrite(char[]cbuf,intoff,intlen)throwsIOException:把數(shù)組cbuf中從索引off開(kāi)始的len個(gè)字符寫入此輸出流中。
publicvoidwrite(Stringstr)throwsIOException:將str字符串?dāng)?shù)據(jù)寫入到輸出流中。
以上就是深圳達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Javase經(jīng)典基礎(chǔ)入門教程:IO流概述”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。