10.2-全棧Java筆記:最全面的IO技術(shù)(二)

上節(jié)我們聊到「IO技術(shù)概念及入門」這節(jié)我們繼續(xù)聊一下IO技術(shù)的分類。

Java中流的概念細(xì)分

按流的方向分類:

輸入流:數(shù)據(jù)流向是數(shù)據(jù)源到程序(InputStream、Reader結(jié)尾的流)

輸出流:數(shù)據(jù)流向是程序到目的地(OutPutStream、Writer結(jié)尾的流)

按處理的數(shù)據(jù)單元:

字節(jié)流:按照字節(jié)讀取數(shù)據(jù)(InputStream、OutputStream)命名上以stream結(jié)尾的流一般是字節(jié)流。

字符流:按照字符讀取數(shù)據(jù)(Reader、Writer)。命名上以Reader/Writer結(jié)尾的流一般是字符流。

按處理對象不同分類:

節(jié)點(diǎn)流:可以直接從數(shù)據(jù)源或目的地讀寫數(shù)據(jù)。

處理流:不直接連接到數(shù)據(jù)源或目的地,是”處理流的流”。通過對其他流的處理提高程序的性能。

節(jié)點(diǎn)流處于IO操作的第一線,所有操作必須通過他們進(jìn)行;處理流可以對節(jié)點(diǎn)流進(jìn)行包裝,提高性能或提高程序的靈活性。

Java中IO流類的體系

? ? ??圖1 IO流體系

從上圖發(fā)現(xiàn),很多流都是成對出現(xiàn),比如:FileInputStream/FileOutputStream,顯然是對文件做輸入和輸出操作。我們下面簡單做個(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ù)組對象”

5.??ObjectInputStream/ObjectOutputStream

節(jié)點(diǎn)流:以字節(jié)為單位直接操作“對象”

6.??DataInputStream/DataOutputStream

節(jié)點(diǎn)流:以字節(jié)為單位直接操作“基本數(shù)據(jù)類型變量”

7.??FileReader/FileWriter

節(jié)點(diǎn)流:以字符為單位直接操作“文本文件”(注意:只能讀寫文本文件)

8.??BufferedReader/BufferedWriter

處理流:將普通的Reader/Writer對象進(jìn)行包裝,增加緩存提高效率

9.??BufferedInputStream/BufferedOutputStream

處理流:將普通的inputStream/outputStream對象進(jìn)行包裝,增加緩存提高效率

10.??InputStreamReader/OutputStreamWriter

處理流:將字節(jié)流對象轉(zhuǎn)化成字符流對象

11.??PrintStream

打印流?

老鳥建議:

上面的解釋,一句話就點(diǎn)中了流的核心作用。大家后面學(xué)習(xí)的時(shí)候,用心體會(huì)。

四大IO抽象類

InputStream/OutputStream和Reader/writer類是所有IO流類的父類,我們有必要簡單了解一下這個(gè)四個(gè)抽象類的作用。然后,通過它們具體的子類熟悉相關(guān)的用法。

1) InputStream

此抽象類是表示字節(jié)輸入流的所有類的超類。InputSteam是一個(gè)抽象類,它不可以實(shí)例化。?數(shù)據(jù)的讀取需要由它的子類來實(shí)現(xiàn)。根據(jù)節(jié)點(diǎn)的不同,它派生了不同的節(jié)點(diǎn)流子類?。

繼承自InputSteam的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit)。

常用方法:

int read():?讀取一個(gè)字節(jié)的數(shù)據(jù),并將字節(jié)的值作為int類型返回(0-255之間的一個(gè)值)。如果未讀出字節(jié)則返回-1。?

void? close()?:?關(guān)閉輸入流對象,釋放相關(guān)系統(tǒng)資源?

2) OutputStream

此抽象類是表示字節(jié)輸出流的所有類的超類。?輸出流接受輸出字節(jié)并將這些字節(jié)發(fā)送到某個(gè)接收器。

常用方法:

void? write(int n):?向輸入流中寫入一個(gè)字節(jié)

void? close()?:?關(guān)閉輸出流對象,釋放相關(guān)系統(tǒng)資源

3) Reader

Reader用于讀取字符流的抽象類,數(shù)據(jù)單位為字符。

int read():?讀取一個(gè)字符的數(shù)據(jù),并將字符的值作為int類型返回(0-65535之間的一個(gè)值,Unicode值)。如果未讀出字符則返回-1。

void? close()?:?關(guān)閉流對象,釋放相關(guān)系統(tǒng)資源

4)?Writer

Writer寫入字符流的抽象類,數(shù)據(jù)單位為字符。

void? write(int n):?向輸入流中寫入一個(gè)字符

void? close()?:?關(guān)閉輸出流對象,釋放相關(guān)系統(tǒng)資源





「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師、高級(jí)工程師、架構(gòu)師。精通Java平臺(tái)軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。


? 筆記包含從淺入深的六大部分:

? A-Java入門階段

? B-數(shù)據(jù)庫從入門到精通

? C-手刃移動(dòng)前端和Web前端

? D-J2EE從了解到實(shí)戰(zhàn)

? E-Java高級(jí)框架精解

? F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容