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

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

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

一. IO流的API

1. API分類

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

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

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

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

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

InputStream和OutputStream的子類包括:

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

1.2 字符流的抽象基類

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

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

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

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

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

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

1.3 小結(jié)

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

Java中凡是由這四個基類派生出來的子類名稱,都會以其父類名稱作為子類名稱的后綴,如InputStream的子類FileInputStream,Reader的子類FileReader。

接下來再分別把這4個基類里的核心子類及其API方法介紹一下。

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

2.1 InputStream的常見子類

以下是InputStream的常見子類,包括節(jié)點流和處理流兩種類型。

2.2 InputStream的常用方法

以下是InputStream類中的常用API方法。

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

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

3.1 OutputStream的常見子類

以下是OutputStream的常見子類,包括節(jié)點流和處理流兩種類型。

3.2 OutputStream的常用方法

以下是OutputStream中的常用方法。

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

4. Reader字符輸入流

4.1 Reader的常見子類

以下是Reader的常見子類,包括節(jié)點流和處理流兩種類型。

4.2 Reader的常用方法

以下是Reader類中的常用方法。

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

5. Writer字符輸出流

5.1 Writer的常見子類

以下是Writer的常見子類,包括節(jié)點流和處理流兩種類型。

5.2 Writer的常見方法

以下是Writer類中的常用方法。

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) 寫入一個字符數(shù)組。 
abstract void write(char[] cbuf, int off, int len) 寫入字符數(shù)組的一部分 
void write(int c) 寫一個字符 
void write(String str) 寫一個字符串 
void write(String str, int off, int len) 寫一個字符串的一部分

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

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

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

6.2 API歸納

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

文件操作流

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

管道操作流

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

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

字節(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ù)存儲到緩沖區(qū)的數(shù)組內(nèi)。通過緩沖區(qū)的read()方法從緩沖區(qū)獲取具體的字符數(shù)據(jù),這樣就避免了每次都和硬盤打交道,提高了數(shù)據(jù)訪問效率。

轉(zhuǎn)化流

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

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

數(shù)據(jù)流

  • DataInputStream:
  • DataOutputStream:

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

打印流

  • PrintStream
  • PrintWriter

注意: 一般是打印到控制臺,可以進行控制打印的地方。

對象流

  • ObjectInputStream
  • ObjectOutputStream

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

序列化流

  • SequenceInputStream

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

二. 結(jié)語

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

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

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

相關(guān)文章

  • 利用javaFX實現(xiàn)移動一個小球的示例代碼

    利用javaFX實現(xiàn)移動一個小球的示例代碼

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

    Java單例模式實例簡述

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

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

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

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

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

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

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

    SpringBoot返回中文亂碼問題解決方法匯總

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

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

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

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

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

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

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

    SpringBoot?Seata?死鎖問題排查記錄

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

最新評論