深入學(xué)習(xí)Java I/O的輸入輸出,看了就會(huì)

深入學(xué)習(xí)Java I/O的輸入輸出,看了就會(huì)

長(zhǎng)沙達(dá)內(nèi)教育      2022-04-30 13:00:01     26

深入學(xué)習(xí)Java I/O的輸入輸出,看了就會(huì),Java I/O需要處理多種場(chǎng)景,Java類庫(kù)的設(shè)計(jì)者都是通過(guò)創(chuàng)建大量的類來(lái)解決這個(gè)問(wèn)題的,單篇文章難以詳述,本文只是試圖提供一個(gè)通

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

Java I/O需要處理多種場(chǎng)景,Java類庫(kù)的設(shè)計(jì)者都是通過(guò)創(chuàng)建大量的類來(lái)解決這個(gè)問(wèn)題的,單篇文章難以詳述,本文只是試圖提供一個(gè)通用的概述傳統(tǒng)I/O類庫(kù)所涉及的類,以掌握整個(gè)上下文,更好地理解和應(yīng)用I./O類庫(kù)解決實(shí)際編程問(wèn)題。具體需要參考JDK文檔。

1.輸入流/輸出流

在Java 1.0中,類庫(kù)的設(shè)計(jì)者首先限制所有與輸入相關(guān)的類都繼承自InputStream,而與輸出相關(guān)的所有類都繼承自O(shè)utputStream。

1)輸入流

InputStream用于表示從不同數(shù)據(jù)源生成輸入的類。這些數(shù)據(jù)來(lái)源包括:

  • 字節(jié)數(shù)組;
  • 字符串對(duì)象;
  • 文件;
  • “管道”的工作方式與實(shí)際管道類似,即一端輸入,另一端輸出。
  • 一系列其他流,以便我們可以將它們收集并合并為一個(gè)流;
  • 其他數(shù)據(jù)源,如Internet連接等。

每個(gè)數(shù)據(jù)源都有其對(duì)應(yīng)的InputStream子類作為基本組件:

  • ByteArray InputStream,允許將內(nèi)存緩沖區(qū)用作InputStream;
  • String Buffer InputStream,將String轉(zhuǎn)換為InputStream;
  • FileInputStream,用于從文件中讀取信息;
  • PipedInputStream,它生成用于寫入相關(guān)PipedOutputStream的數(shù)據(jù)。實(shí)現(xiàn)“流水線”的概念;
  • SequenceInputStream將兩個(gè)或多個(gè)InputStream對(duì)象轉(zhuǎn)換為單個(gè)InputStream。

2)輸出流

  • OutputStream用于表示可以輸出到不同數(shù)據(jù)源的類。它的特定子類決定了輸出的目的地:字節(jié)數(shù)組、文件或管道。它也用作基本組件:
  • ByteArray輸出流,它在內(nèi)存中創(chuàng)建緩沖區(qū)。所有發(fā)送到流的數(shù)據(jù)都應(yīng)該放在這個(gè)緩沖區(qū)中。
  • FileOutput Stream,用于將信息寫入文件;
  • PipedOutputStream,任何寫入其中的信息都會(huì)自動(dòng)作為相關(guān)PipedInputStream的輸出,實(shí)現(xiàn)“流水線”的概念;

3)裝飾器

除了上述基本組件外,還有兩個(gè)子類:FilterInputStream/FilterOutputStream,它們也是InputStream和OutputStream的子類。它們?yōu)?ldquo;decorator”類提供基類,其中“decorator”類可以將屬性或有用的接口連接到基本組件。因?yàn)樯厦嫣岬降腎nputStream/OutputStream是單字節(jié)操作的,而真正的I/O場(chǎng)景遠(yuǎn)不止于此,它通過(guò)“裝飾”來(lái)擴(kuò)展其功能(原理是類的組合)。

我自己梳理了InputStream/OutputStream流繼承層次結(jié)構(gòu),結(jié)合下面的講解,可以對(duì)字節(jié)流系統(tǒng)有更清晰的認(rèn)識(shí):

4)過(guò)濾輸入流

FilterInputStream類有以下子類,即具體的裝飾器:

  • 數(shù)據(jù)輸入流;
  • 緩沖輸入流;
  • 行號(hào)輸入流;

它的裝飾功能主要有兩個(gè)方面:

  • 讀取不同基本類型的數(shù)據(jù)和String對(duì)象,如DataInputStream;
  • 內(nèi)部修改InputStream的行為:Buffer InputStream,LineNumber InputStream,并保留它讀過(guò)的行;

5)過(guò)濾輸出流

與Filter Input Stream類似,F(xiàn)ilter Output Stream主要完成寫入功能,主要包括以下裝飾器:

  • Data Output Stream與Data Input Stream一起使用,可以將基本類型的數(shù)據(jù)(int、char、long)以可移植的方式寫入流。
  • PrintStream,用于生成格式化輸出。Data Output Stream處理數(shù)據(jù)存儲(chǔ),PrintStream處理顯示。
  • Buffered Output Stream,用于避免每次發(fā)送數(shù)據(jù)時(shí)的實(shí)際寫操作。表示“使用緩沖區(qū)”。可以調(diào)用flush()清除緩沖區(qū);

以上就是長(zhǎng)沙達(dá)內(nèi)教育小編介紹的"深入學(xué)習(xí)Java I/O的輸入輸出,看了就會(huì)",希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。     

學(xué)習(xí)Java

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。