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

學(xué)習(xí)Java之IO流中有哪些復(fù)雜的API

 更新時(shí)間:2023年09月08日 08:42:44   作者:一一哥Sun  
這篇文章我們要先對(duì)IO流的API有個(gè)基本的認(rèn)知,因?yàn)镮O流的類(lèi)和方法太多了,我們不得不專(zhuān)門(mén)學(xué)習(xí)一下,所以本文就給大家詳細(xì)的講講Java?IO流中復(fù)雜的API,需要的朋友可以參考下

一. IO流的API

1. API分類(lèi)

Java中關(guān)于IO流的API,總的來(lái)說(shuō)共有四大類(lèi),分別如下:

  • InputStream---字節(jié)輸入流;
  • OutputStream---字節(jié)輸出流;
  • Reader-----字符輸入流;
  • Writer------字符輸出流。

在Java中,所有輸入流類(lèi)都是 InputStream(字節(jié)輸入流)和 Reader(字符輸入流)的子類(lèi),其中InputStream類(lèi)是字節(jié)輸入流的抽象類(lèi),Reader是字符輸入流的抽象類(lèi);所有的輸出流類(lèi)都是OutputStream(字節(jié)輸出流)和 Writer(字符輸出流)的子類(lèi),其中OutputStream類(lèi)是字節(jié)輸出流的抽象類(lèi),Writer是字符輸出流的抽象類(lèi)。

1.1 字節(jié)流的抽象基類(lèi)

其中,字節(jié)流主要有兩個(gè)類(lèi):InputStream和OutputStream,分別用于讀取和寫(xiě)入字節(jié)數(shù)據(jù)。所有的字節(jié)輸入流類(lèi)都是InputStream的子類(lèi),所有的字節(jié)輸出流類(lèi)都是OutputStream的子類(lèi),這兩個(gè)類(lèi)都是抽象類(lèi),不能直接使用,需要使用其子類(lèi)進(jìn)行實(shí)例化。InputStream與OutputStream的關(guān)系如下圖所示:

InputStream和OutputStream的子類(lèi)包括:

  • FileInputStream和FileOutputStream:用于文件的讀寫(xiě)操作;
  • ByteArrayInputStream和ByteArrayOutputStream:用于在內(nèi)存中讀寫(xiě)二進(jìn)制數(shù)據(jù);
  • PipedInputStream和PipedOutputStream:用于線程間的數(shù)據(jù)傳輸;
  • FilterInputStream和FilterOutputStream:用于裝飾其他流,增加流的功能。

1.2 字符流的抽象基類(lèi)

Java提供了兩個(gè)字符流的抽象類(lèi):Reader 和 Writer,所有的字符輸入流類(lèi)都是Reader的子類(lèi),所有的字符輸出流類(lèi)都是Writer的子類(lèi)。它們是抽象類(lèi),不能直接使用,我們需要使用它們的子類(lèi)來(lái)進(jìn)行具體的操作。

Reader和Writer的本質(zhì)其實(shí)也是一個(gè)能自動(dòng)編解碼的InputStream和OutputStream。Reader和Writer的數(shù)據(jù)源雖然是字節(jié),但我們讀入寫(xiě)出的數(shù)據(jù)都是char類(lèi)型的字符,這是因?yàn)镽eader和Writer的內(nèi)部會(huì)把讀入寫(xiě)出的byte解碼編碼轉(zhuǎn)換成char。Reader與Writer類(lèi)關(guān)系如下圖所示:

其中的Reader類(lèi)用來(lái)讀取字符流的抽象類(lèi),它提供了一些用來(lái)讀取字符的方法,我們可以使用它的子類(lèi)來(lái)進(jìn)行文件讀取、網(wǎng)絡(luò)讀取等操作。常用的Reader子類(lèi)如下:

  • FileReader:用于讀取文件字符流。
  • InputStreamReader:從字節(jié)流到字符流的橋梁,它可以將字節(jié)流轉(zhuǎn)換為字符流。
  • CharArrayReader:可以從字符數(shù)組中讀取字符流。
  • BufferedReader:可以從字符流中緩存讀取數(shù)據(jù),提高效率。

而Writer類(lèi)是用來(lái)寫(xiě)入字符流的抽象類(lèi),它提供了一些寫(xiě)入字符的方法,我們可以使用它的子類(lèi)來(lái)進(jìn)行文件寫(xiě)入、網(wǎng)絡(luò)寫(xiě)入等操作。常用的 Writer 子類(lèi):

  • FileWriter:用于寫(xiě)入文件字符流。
  • OutputStreamWriter:從字符流到字節(jié)流的橋梁,它可以將字符流轉(zhuǎn)換為字節(jié)流。
  • CharArrayWriter:可以將字符流寫(xiě)入到字符數(shù)組中。
  • BufferedWriter:可以緩存寫(xiě)入字符流,提高效率。

1.3 小結(jié)

對(duì)字節(jié)流和字符流的關(guān)系,我們可以用下圖概括展示:

Java中凡是由這四個(gè)基類(lèi)派生出來(lái)的子類(lèi)名稱(chēng),都會(huì)以其父類(lèi)名稱(chēng)作為子類(lèi)名稱(chēng)的后綴,如InputStream的子類(lèi)FileInputStream,Reader的子類(lèi)FileReader。

接下來(lái)再分別把這4個(gè)基類(lèi)里的核心子類(lèi)及其API方法介紹一下。

2. InputStream字節(jié)輸入流

2.1 InputStream的常見(jiàn)子類(lèi)

以下是InputStream的常見(jiàn)子類(lèi),包括節(jié)點(diǎn)流和處理流兩種類(lèi)型。

2.2 InputStream的常用方法

以下是InputStream類(lèi)中的常用API方法。

int available() 從下一次調(diào)用此輸入流的方法返回可從該輸入流讀取(或跳過(guò))的字節(jié)數(shù),而不會(huì)阻塞。
void close() 關(guān)閉此輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 
void mark(int readlimit) 標(biāo)記此輸入流中的當(dāng)前位置。 
boolean markSupported() 測(cè)試此輸入流是否支持 mark和 reset方法。 
abstract int read() 從輸入流讀取數(shù)據(jù)的下一個(gè)字節(jié)。 
int read(byte[] b) 從輸入流中讀取一些字節(jié)數(shù),并將它們存儲(chǔ)到緩沖器陣列 b。 
int read(byte[] b, int off, int len) 從輸入流讀取最多 len個(gè)字節(jié)的數(shù)據(jù)到字節(jié)數(shù)組。
byte[] readAllBytes() 從輸入流讀取所有剩余字節(jié)。 
int readNBytes(byte[] b, int off, int len) 將所請(qǐng)求的字節(jié)數(shù)從輸入流讀入給定的字節(jié)數(shù)組。 
void reset() 將此流重新定位到最后在此輸入流上調(diào)用 mark方法時(shí)的位置。 
long skip(long n) 跳過(guò)并丟棄來(lái)自此輸入流的 n字節(jié)的數(shù)據(jù)。 
long transferTo(OutputStream out) 從該輸入流中讀取所有字節(jié),并按讀取的順序?qū)⒆止?jié)寫(xiě)入給定的輸出流。

3. OutputStream字節(jié)輸出流

3.1 OutputStream的常見(jiàn)子類(lèi)

以下是OutputStream的常見(jiàn)子類(lèi),包括節(jié)點(diǎn)流和處理流兩種類(lèi)型。

3.2 OutputStream的常用方法

以下是OutputStream中的常用方法。

void close() 關(guān)閉此輸出流并釋放與此流相關(guān)聯(lián)的任何系統(tǒng)資源。 
void flush() 刷新此輸出流并強(qiáng)制任何緩沖的輸出字節(jié)被寫(xiě)出。 
void write(byte[] b) 將 b.length字節(jié)從指定的字節(jié)數(shù)組寫(xiě)入此輸出流。 
void write(byte[] b, int off, int len) 從指定的字節(jié)數(shù)組寫(xiě)入 len字節(jié),從偏移量 off開(kāi)始輸出到此輸出流。 
abstract void write(int b) 將指定的字節(jié)寫(xiě)入此輸出流。 

4. Reader字符輸入流

4.1 Reader的常見(jiàn)子類(lèi)

以下是Reader的常見(jiàn)子類(lèi),包括節(jié)點(diǎn)流和處理流兩種類(lèi)型。

4.2 Reader的常用方法

以下是Reader類(lèi)中的常用方法。

abstract void close() 關(guān)閉流并釋放與之相關(guān)聯(lián)的任何系統(tǒng)資源。 
void mark(int readAheadLimit) 標(biāo)記流中的當(dāng)前位置。 
boolean markSupported() 告訴這個(gè)流是否支持mark()操作。 
int read() 讀一個(gè)字符 
int read(char[] cbuf) 將字符讀入數(shù)組。
abstract int read(char[] cbuf, int off, int len) 將字符讀入數(shù)組的一部分。 
int read(CharBuffer target) 嘗試將字符讀入指定的字符緩沖區(qū)。
boolean ready() 告訴這個(gè)流是否準(zhǔn)備好被讀取。 
void reset() 重置流。 
long skip(long n) 跳過(guò)字符 

5. Writer字符輸出流

5.1 Writer的常見(jiàn)子類(lèi)

以下是Writer的常見(jiàn)子類(lèi),包括節(jié)點(diǎn)流和處理流兩種類(lèi)型。

5.2 Writer的常見(jiàn)方法

以下是Writer類(lèi)中的常用方法。

Writer append(char c) 將指定的字符附加到此writer
Writer append(CharSequence csq) 將指定的字符序列附加到此writer
Writer append(CharSequence csq, int start, int end) 將指定字符序列的子序列附加到此writer
abstract void close() 關(guān)閉流,先刷新
abstract void flush() 刷新流 
void write(char[] cbuf) 寫(xiě)入一個(gè)字符數(shù)組。 
abstract void write(char[] cbuf, int off, int len) 寫(xiě)入字符數(shù)組的一部分 
void write(int c) 寫(xiě)一個(gè)字符 
void write(String str) 寫(xiě)一個(gè)字符串 
void write(String str, int off, int len) 寫(xiě)一個(gè)字符串的一部分

6. IO流梳理總結(jié)

6.1 API完整類(lèi)關(guān)系

最后,為了讓大家對(duì)IO流有一個(gè)完整清晰地認(rèn)知,針對(duì)以上這些java.io包中的API類(lèi)關(guān)系,給大家繪制了下圖:

6.2 API歸納

從上圖中,我們可以看到,Java中有各種各樣的IO流API類(lèi),如果我們對(duì)這些API再細(xì)分一下,又可以歸納如下。

文件操作流

  • FileInputStream:字節(jié)輸入流;
  • FileOutputStream:字節(jié)輸出流;
  • FileReader:字符輸入流;
  • FileWriter:字符輸出流

管道操作流

  • PipedInputStream:管道字節(jié)輸入流;
  • PipedOutStream:管道字節(jié)輸出流;
  • PipedReader:管道字符輸入流;
  • PipedWriter:管道字符輸出流

注意: PipedInputStream的實(shí)例要和PipedOutputStream的實(shí)例共同使用,共同完成管道的讀取寫(xiě)入操作,主要用于線程操作。

字節(jié)/字符數(shù)組操作流

  • ByteArrayInputStream:字節(jié)數(shù)組輸入流;
  • ByteArrayOutputStream:字節(jié)數(shù)組輸出流;
  • CharArrayReader:字符數(shù)組輸入流;
  • CharArrayWriter:字符數(shù)組輸出流

Buffered緩沖流

  • BufferedInputStream:字節(jié)緩沖區(qū)輸入流;
  • BufferedOutputStream:字節(jié)緩沖區(qū)輸出流;
  • BufferedReader:字符緩沖區(qū)輸入流;
  • BufferedWriter:字符緩沖區(qū)輸出流

注意: 這是帶緩沖區(qū)的處理流,緩沖流的底層從具體設(shè)備上獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到緩沖區(qū)的數(shù)組內(nèi)。通過(guò)緩沖區(qū)的read()方法從緩沖區(qū)獲取具體的字符數(shù)據(jù),這樣就避免了每次都和硬盤(pán)打交道,提高了數(shù)據(jù)訪問(wèn)效率。

轉(zhuǎn)化流

  • InputStreamReader:字符節(jié)點(diǎn)輸入流
  • OutputStreamWriter:字符節(jié)點(diǎn)輸出流

注意: 轉(zhuǎn)換流,從字面意思可以看出它是字節(jié)流與字符流之間的橋梁,可以將字節(jié)轉(zhuǎn)為字符,或者將字符轉(zhuǎn)為字節(jié)。

數(shù)據(jù)流

  • DataInputStream:
  • DataOutputStream:

注意: 數(shù)據(jù)流可以解決我們輸出數(shù)據(jù)類(lèi)型的困難,數(shù)據(jù)流可以直接輸出float類(lèi)型或long類(lèi)型,提高了數(shù)據(jù)讀寫(xiě)的效率。

打印流

  • PrintStream
  • PrintWriter

注意: 一般是打印到控制臺(tái),可以進(jìn)行控制打印的地方。

對(duì)象流

  • ObjectInputStream
  • ObjectOutputStream

注意: ObjectOutputStream可以將Java對(duì)象的原始數(shù)據(jù)類(lèi)型寫(xiě)出到文件,實(shí)現(xiàn)對(duì)象的持久存儲(chǔ);ObjectInputStream反序列化流,將之前使用ObjectOutputStream序列化的原始數(shù)據(jù)恢復(fù)為對(duì)象。

序列化流

  • SequenceInputStream

對(duì)于以上這些API類(lèi),大家先不用去記憶,只需要先有一個(gè)整體的印象即可。后面我們會(huì)在具體的案例中學(xué)習(xí)這些API,以后這些API用多了,自然就記住了。

二. 結(jié)語(yǔ)

至此,就把IO流相關(guān)的API類(lèi)及其方法告訴大家了,你能記住嗎?今天的重點(diǎn)如下:

  • IO流有不同的分類(lèi)標(biāo)準(zhǔn),包括輸入流和輸出流、字節(jié)流和字符流、節(jié)點(diǎn)流和處理流;
  • 字節(jié)流主要有兩個(gè)類(lèi):InputStream和OutputStream;
  • 字節(jié)流:二進(jìn)制數(shù)據(jù)以byte為最小單位在InputStream/OutputStream中單向流動(dòng);
  • 字符流:字符數(shù)據(jù)以char為最小單位在Reader/Writer中單向流動(dòng);
  • Java提供了兩個(gè)字符流的抽象類(lèi):Reader 和 Writer,所有的字符輸入流類(lèi)都是Reader的子類(lèi),所有的字符輸出流類(lèi)都是Writer的子類(lèi);
  • Reader和Writer的本質(zhì)其實(shí)也是一個(gè)能自動(dòng)編解碼的InputStream和OutputStream。

以上就是學(xué)習(xí)Java之IO流中有哪些復(fù)雜的API的詳細(xì)內(nèi)容,更多關(guān)于Java IO流中API的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用javaFX實(shí)現(xiàn)移動(dòng)一個(gè)小球的示例代碼

    利用javaFX實(shí)現(xiàn)移動(dòng)一個(gè)小球的示例代碼

    這篇文章主要介紹了利用javaFX實(shí)現(xiàn)移動(dòng)一個(gè)小球的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java單例模式實(shí)例簡(jiǎn)述

    Java單例模式實(shí)例簡(jiǎn)述

    這篇文章主要介紹了Java單例模式,在Java應(yīng)用程序設(shè)計(jì)中有著非常重要的作用,本文以實(shí)例形式對(duì)此加以簡(jiǎn)單分析,需要的朋友可以參考下
    2014-09-09
  • 詳解Spring 中如何控制2個(gè)bean中的初始化順序

    詳解Spring 中如何控制2個(gè)bean中的初始化順序

    本篇文章主要介紹了Spring 中如何控制2個(gè)bean中的初始化順序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 關(guān)于Java類(lèi)的構(gòu)造方法詳解

    關(guān)于Java類(lèi)的構(gòu)造方法詳解

    這篇文章主要介紹了關(guān)于Java類(lèi)的構(gòu)造方法詳解的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • java  設(shè)計(jì)模式之單例模式

    java 設(shè)計(jì)模式之單例模式

    這篇文章主要介紹了java 設(shè)計(jì)模式之單例模式的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot返回中文亂碼問(wèn)題解決方法匯總

    SpringBoot返回中文亂碼問(wèn)題解決方法匯總

    這幾天在使用Spring Boot學(xué)習(xí)AOP原理的時(shí)候,通過(guò)瀏覽器訪問(wèn)后端接口的時(shí)候,響應(yīng)報(bào)文總是出現(xiàn)中文亂碼問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于SpringBoot返回中文亂碼問(wèn)題解決方法,需要的朋友可以參考下
    2023-06-06
  • Java微信公眾平臺(tái)開(kāi)發(fā)(8) 多媒體消息回復(fù)

    Java微信公眾平臺(tái)開(kāi)發(fā)(8) 多媒體消息回復(fù)

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 解決Spring?MVC中文亂碼的編碼配置

    解決Spring?MVC中文亂碼的編碼配置

    這篇文章主要為大家介紹了解決SpringMVC中文亂碼的編碼配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java Web stmp發(fā)送帶附件郵件(附SSL版)

    Java Web stmp發(fā)送帶附件郵件(附SSL版)

    這篇文章主要為大家詳細(xì)介紹了Java Web stmp發(fā)送帶附件郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot?Seata?死鎖問(wèn)題排查記錄

    SpringBoot?Seata?死鎖問(wèn)題排查記錄

    這篇文章主要介紹了SpringBoot?Seata?死鎖問(wèn)題排查,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-12-12

最新評(píng)論