欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中IO流簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年05月11日 16:28:16   投稿:mrr  
Java io系統(tǒng)的設(shè)計(jì)初衷,就是為了實(shí)現(xiàn)“文件、控制臺(tái)、網(wǎng)絡(luò)設(shè)備”這些io設(shè)置的通信。接下來(lái)通過(guò)本文給大家介紹Java中IO流簡(jiǎn)介,感興趣的朋友一起看看吧

Java io簡(jiǎn)介

Java io系統(tǒng)的設(shè)計(jì)初衷,就是為了實(shí)現(xiàn)“文件、控制臺(tái)、網(wǎng)絡(luò)設(shè)備”這些io設(shè)置的通信。例如,對(duì)于一個(gè)文件,我們可以打開(kāi)文件,然后進(jìn)行讀取和寫(xiě)入。在java 1.0中,java提供的類都是以字節(jié)(byte)為單位,例如,F(xiàn)ileInputStream和FileOutputStream。而到了java 1.1,為了與國(guó)際化進(jìn)行接軌,在java io中添加了許多以字符(Unicode)為單位進(jìn)行操作的類。

在java io的稱呼中,我們經(jīng)常會(huì)提到“輸入流”、“輸出流”等等概念。首先,什么是流呢?

所謂“流”,就是一種抽象的數(shù)據(jù)的總稱,它的本質(zhì)是能夠進(jìn)行傳輸。

      a) 按照“流”的數(shù)據(jù)流向,可以將其化分為:輸入流和輸出流。

      b) 按照“流”中處理數(shù)據(jù)的單位,可以將其區(qū)分為:字節(jié)流和字符流。在java中,字節(jié)是占1個(gè)Byte,即8位;而字符是占2個(gè)Byte,即16位。而且,需要注意的是,java的字節(jié)是有符號(hào)類型,而字符是無(wú)符號(hào)類型!

Java io框架

有了上面的基本概念之后,我們看看java io的框架。

1. 以字節(jié)為單位的輸入流的框架圖

下面,是以字節(jié)為單位的輸入流的框架圖。

從中,我們可以看出。

(01) InputStream 是以字節(jié)為單位的輸入流的超類。InputStream提供了read()接口從輸入流中讀取字節(jié)數(shù)據(jù)。

(02) ByteArrayInputStream 是字節(jié)數(shù)組輸入流。它包含一個(gè)內(nèi)部緩沖區(qū),該緩沖區(qū)包含從流中讀取的字節(jié);通俗點(diǎn)說(shuō),它的內(nèi)部緩沖區(qū)就是一個(gè)字節(jié)數(shù)組,而B(niǎo)yteArrayInputStream本質(zhì)就是通過(guò)字節(jié)數(shù)組來(lái)實(shí)現(xiàn)的。

(03) PipedInputStream 是管道輸入流,它和PipedOutputStream一起使用,能實(shí)現(xiàn)多線程間的管道通信。

(04) FilterInputStream 是過(guò)濾輸入流。它是DataInputStream和BufferedInputStream的超類。

(05) DataInputStream 是數(shù)據(jù)輸入流。它是用來(lái)裝飾其它輸入流,它“允許應(yīng)用程序以與機(jī)器無(wú)關(guān)方式從底層輸入流中讀取基本 Java 數(shù)據(jù)類型”。

(06) BufferedInputStream 是緩沖輸入流。它的作用是為另一個(gè)輸入流添加緩沖功能。

(07) File 是“文件”和“目錄路徑名”的抽象表示形式。關(guān)于File,注意兩點(diǎn):

a), File不僅僅只是表示文件,它也可以表示目錄!

b), File雖然在io保重定義,但是它的超類是Object,而不是InputStream。

(08) FileDescriptor 是“文件描述符”。它可以被用來(lái)表示開(kāi)放文件、開(kāi)放套接字等。

(09) FileInputStream 是文件輸入流。它通常用于對(duì)文件進(jìn)行讀取操作。

(10) ObjectInputStream 是對(duì)象輸入流。它和ObjectOutputStream一起,用來(lái)提供對(duì)“基本數(shù)據(jù)或?qū)ο蟆钡某志么鎯?chǔ)。

2. 以字節(jié)為單位的輸出流的框架圖

下面,是以字節(jié)為單位的輸出流的框架圖。

從中,我們可以看出。以字節(jié)為單位的輸出流的公共父類是OutputStream。

(01) OutputStream 是以字節(jié)為單位的輸出流的超類。OutputStream提供了write()接口從輸出流中讀取字節(jié)數(shù)據(jù)。

(02) ByteArrayOutputStream 是字節(jié)數(shù)組輸出流。寫(xiě)入ByteArrayOutputStream的數(shù)據(jù)被寫(xiě)入一個(gè) byte 數(shù)組。緩沖區(qū)會(huì)隨著數(shù)據(jù)的不斷寫(xiě)入而自動(dòng)增長(zhǎng)??墒褂?toByteArray() 和 toString() 獲取數(shù)據(jù)。

(03) PipedOutputStream 是管道輸出流,它和PipedInputStream一起使用,能實(shí)現(xiàn)多線程間的管道通信。

(04) FilterOutputStream 是過(guò)濾輸出流。它是DataOutputStream,BufferedOutputStream和PrintStream的超類。

(05) DataOutputStream 是數(shù)據(jù)輸出流。它是用來(lái)裝飾其它輸出流,它“允許應(yīng)用程序以與機(jī)器無(wú)關(guān)方式向底層寫(xiě)入基本 Java 數(shù)據(jù)類型”。

(06) BufferedOutputStream 是緩沖輸出流。它的作用是為另一個(gè)輸出流添加緩沖功能。

(07) PrintStream 是打印輸出流。它是用來(lái)裝飾其它輸出流,能為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。

(08) FileOutputStream 是文件輸出流。它通常用于向文件進(jìn)行寫(xiě)入操作。

(09) ObjectOutputStream 是對(duì)象輸出流。它和ObjectInputStream一起,用來(lái)提供對(duì)“基本數(shù)據(jù)或?qū)ο蟆钡某志么鎯?chǔ)。 

3. 以字節(jié)為單位的輸入流和輸出流關(guān)聯(lián)的框架圖

輸入流和輸出流都有對(duì)應(yīng)的關(guān)系,下面是將以字節(jié)為單位的輸入流和輸出流關(guān)聯(lián)起來(lái)的圖片。 

4. 以字符為單位的輸入流的框架圖

下面,是以字符為單位的輸入流的框架圖。 

從中,我們可以看出。以字符為單位的輸入流的公共父類是Reader。

(01) Reader 是以字符為單位的輸入流的超類。它提供了read()接口來(lái)取字符數(shù)據(jù)。

(02) CharArrayReader 是字符數(shù)組輸入流。它用于讀取字符數(shù)組,它繼承于Reader。操作的數(shù)據(jù)是以字符為單位!

(03) PipedReader 是字符類型的管道輸入流。它和PipedWriter一起是可以通過(guò)管道進(jìn)行線程間的通訊。在使用管道通信時(shí),必須將PipedWriter和PipedReader配套使用。

(04) FilterReader 是字符類型的過(guò)濾輸入流。

(05) BufferedReader 是字符緩沖輸入流。它的作用是為另一個(gè)輸入流添加緩沖功能。

(06) InputStreamReader 是字節(jié)轉(zhuǎn)字符的輸入流。它是字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。

(07) FileReader 是字符類型的文件輸入流。它通常用于對(duì)文件進(jìn)行讀取操作。 

5. 以字符為單位的輸出流的框架圖

下面,是以字符為單位的輸出流的框架圖。 

(01) Writer 是以字符為單位的輸出流的超類。它提供了write()接口往其中寫(xiě)入數(shù)據(jù)。

(02) CharArrayWriter 是字符數(shù)組輸出流。它用于讀取字符數(shù)組,它繼承于Writer。操作的數(shù)據(jù)是以字符為單位!

(03) PipedWriter 是字符類型的管道輸出流。它和PipedReader一起是可以通過(guò)管道進(jìn)行線程間的通訊。在使用管道通信時(shí),必須將PipedWriter和PipedWriter配套使用。

(04) FilterWriter 是字符類型的過(guò)濾輸出流。

(05) BufferedWriter 是字符緩沖輸出流。它的作用是為另一個(gè)輸出流添加緩沖功能。

(06) OutputStreamWriter 是字節(jié)轉(zhuǎn)字符的輸出流。它是字節(jié)流通向字符流的橋梁:它使用指定的 charset 將字節(jié)轉(zhuǎn)換為字符并寫(xiě)入。

(07) FileWriter 是字符類型的文件輸出流。它通常用于對(duì)文件進(jìn)行讀取操作。

(08) PrintWriter 是字符類型的打印輸出流。它是用來(lái)裝飾其它輸出流,能為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。 

6. 以字符為單位的輸入流和輸出流關(guān)聯(lián)的框架圖

下面是將以字符為單位的輸入流和輸出流關(guān)聯(lián)起來(lái)的圖片。 

7. 字節(jié)轉(zhuǎn)換為字符流的框架圖

在java中,字節(jié)流能轉(zhuǎn)換為字符流,下面是它們的轉(zhuǎn)換關(guān)系圖。 

從中,我們可以看出。

(01) FileReader繼承于InputStreamReader,而InputStreamReader依賴于InputStream。具體表現(xiàn)在InputStreamReader的構(gòu)造函數(shù)是以InputStream為參數(shù)。我們傳入InputStream,在InputStreamReader內(nèi)部通過(guò)轉(zhuǎn)碼,將字節(jié)轉(zhuǎn)換成字符。

(02) FileWriter繼承于OutputStreamWriter,而OutputStreamWriter依賴于OutputStream。具體表現(xiàn)在OutputStreamWriter的構(gòu)造函數(shù)是以O(shè)utputStream為參數(shù)。我們傳入OutputStream,在OutputStreamWriter內(nèi)部通過(guò)轉(zhuǎn)碼,將字節(jié)轉(zhuǎn)換成字符。 

8. 字節(jié)和字符的輸入流對(duì)應(yīng)關(guān)系

9. 字節(jié)和字符的輸出流對(duì)應(yīng)關(guān)系

認(rèn)識(shí)了java io的總體框架之后。接下來(lái),我們可以開(kāi)始對(duì)其中的各個(gè)類進(jìn)入學(xué)習(xí),包括“它的作用和用法,源碼的探索”等方面。

相關(guān)文章

  • Spring整合Springmvc的相關(guān)介紹

    Spring整合Springmvc的相關(guān)介紹

    今天小編就為大家分享一篇關(guān)于Spring整合Springmvc的相關(guān)介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題

    解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題

    這篇文章主要介紹了解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 解決spring 處理request.getInputStream()輸入流只能讀取一次問(wèn)題

    解決spring 處理request.getInputStream()輸入流只能讀取一次問(wèn)題

    這篇文章主要介紹了解決spring 處理request.getInputStream()輸入流只能讀取一次問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java synchronized偏向鎖的概念與使用

    Java synchronized偏向鎖的概念與使用

    因?yàn)樵谖覀儗?xiě)的程序當(dāng)中可能會(huì)經(jīng)常使用到synchronized關(guān)鍵字,因此JVM對(duì)synchronized做出了很多優(yōu)化,而在本篇文章當(dāng)中我們將仔細(xì)介紹JVM對(duì)synchronized的偏向鎖的細(xì)節(jié)
    2023-02-02
  • java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

    這篇文章主要介紹了java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決

    SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決

    本文主要介紹了SpringBoot雪花算法主鍵ID傳到前端后精度丟失問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    這篇文章主要介紹了java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • 一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法

    一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法

    線程池(thread pool)是一種線程使用模式。線程過(guò)多或者頻繁創(chuàng)建和銷(xiāo)毀線程會(huì)帶來(lái)調(diào)度開(kāi)銷(xiāo),進(jìn)而影響緩存局部性和整體性能。這篇文章主要介紹了一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • java Hibernate延遲加載

    java Hibernate延遲加載

    對(duì)one-to-one 關(guān)系進(jìn)行延遲加載和其他關(guān)系相比稍微有些不同。many-to-one 的延遲加載是在配置文件的class 標(biāo)簽
    2008-10-10
  • 值得收藏的2017年Java開(kāi)發(fā)崗位面試題

    值得收藏的2017年Java開(kāi)發(fā)崗位面試題

    這篇文章主要為大家推薦一份值得收藏的2017年Java開(kāi)發(fā)崗位面試題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論