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

一文詳解JAVA中InputStreamReader流

 更新時(shí)間:2023年04月21日 16:06:56   作者:咕嚕是個(gè)大胖子  
本文主要介紹了一文詳解JAVA中InputStreamReader流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、InputStreamReader類

API文檔說明:InputStreamReader類是從字節(jié)流到字符流的橋接器:它使用指定的字符集讀取字節(jié)并將它們解碼為字符。 它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平臺的默認(rèn)字符集。每次調(diào)用一個(gè)InputStreamReader的read()方法都可能導(dǎo)致從底層字節(jié)輸入流中讀取一個(gè)或多個(gè)字節(jié)。 為了實(shí)現(xiàn)字節(jié)到字符的有效轉(zhuǎn)換,可以從基礎(chǔ)流中提取比滿足當(dāng)前讀取操作所需的更多字節(jié)。為了獲得最高效率,請考慮在BufferedReader中包裝InputStreamReader

其繼承Reader類

public class InputStreamReader extends Reader {}

1)字節(jié)流到字符流的橋梁怎么理解?

1、計(jì)算機(jī)存儲的單位是字節(jié),如盡管txt文本中有中文漢字這樣的字符,但是對計(jì)算機(jī)而言,其是字節(jié)形式存在的

2、字節(jié)流讀取是單字節(jié)讀取,但是不同字符集解碼成字符需要不通過個(gè)數(shù),因此字節(jié)流讀取會報(bào)錯(cuò)

3、 那么就需要一個(gè)流把字節(jié)流讀取的字節(jié)進(jìn)行緩沖而后在通過字符集解碼成字符返回,因而形式上看是字符流

4、InputStreamReader流就是起這個(gè)作用,實(shí)現(xiàn)從字節(jié)流到字符流的轉(zhuǎn)換

2)使用指定的字符集讀取字節(jié)并將它們解碼為字符怎么理解?

字節(jié)本質(zhì)是8個(gè)二進(jìn)制位,且不同的字符集對同一字節(jié)解碼后的字符結(jié)果是不同的,因此在讀取字符時(shí)務(wù)必要指定合適的字符集,否則讀取的內(nèi)容會產(chǎn)生亂碼

3)它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平臺的默認(rèn)字符集怎么理解?

意味著InputStreamReader類有多個(gè)方法或者多個(gè)構(gòu)造方法來設(shè)置字符集

4)每次調(diào)用一個(gè)InputStreamReader的read()方法都可能導(dǎo)致從底層字節(jié)輸入流中讀取一個(gè)或多個(gè)字節(jié)怎么理解?

read()方法會嘗試盡量沖底層字節(jié)流中讀取2個(gè)字符到字符緩沖區(qū)中,注意這里是盡量,若遇到文件最后字符,則就只能讀取到1個(gè)字符,因此每次read()方法讀取的字節(jié)數(shù)是不定的

5)為了實(shí)現(xiàn)字節(jié)到字符的有效轉(zhuǎn)換,可以從基礎(chǔ)流中提取比滿足當(dāng)前讀取操作所需的更多字節(jié),請考慮在BufferedReader中包裝InputStreamReader

該話暫未理解,需要了解BufferedReader類后對比讀取效率才可得出答案

二、InputStreamReader構(gòu)造方法

1)使用默認(rèn)的字符集構(gòu)造InputStreamReader流:本質(zhì)是初始化其實(shí)例域的一個(gè)變量,并未看到任何關(guān)于字符集的設(shè)置

 public InputStreamReader(InputStream in) {
        super(in);
        try {
            sd = StreamDecoder.forInputStreamReader(in, this, (String)null);
        } catch (UnsupportedEncodingException e) {
           
            throw new Error(e);
        }
    }

2)使用指定的字符集名稱構(gòu)造InputStreamReader流:本質(zhì)是初始化其實(shí)例域的一個(gè)變量,可以發(fā)現(xiàn)字符集是初始化方法的第三個(gè)參數(shù)

 public InputStreamReader(InputStream in, String charsetName)
        throws UnsupportedEncodingException
    {
        super(in);
        if (charsetName == null)
            throw new NullPointerException("charsetName");
        sd = StreamDecoder.forInputStreamReader(in, this, charsetName);
    }

3)sd變量:本質(zhì)是StreamDecoder類的對象,InputStreamReader的構(gòu)造方法就是在給此對象做初始化操作

private final StreamDecoder sd;

三、InputStreamReaderAPI

1、我們可以發(fā)現(xiàn)InputStreamReaderAPI類的所有API都是利用了sd變量的,因此可以看出InputStreamReader類的方法本質(zhì)是調(diào)用StreamDecoder類方法

2、因此我們需要了解StreamDecoder類,以便了解到InputStreamReader類的方法是如何起實(shí)質(zhì)性作用的

    /**
     * 獲取設(shè)置的字符集
     */
    public String getEncoding() {
        return sd.getEncoding();
    }
 
    /**
     * 讀取流并返回一個(gè)字符,遇到文件末尾返回-1
     */
    public int read() throws IOException {
        return sd.read();
    }
 
    /**
     * 讀取字符到字符數(shù)組的部分中,遇到文件末尾返回-1
     */
    public int read(char cbuf[], int offset, int length) throws IOException {
        return sd.read(cbuf, offset, length);
    }
 
    /**
     * 檢測流是否準(zhǔn)備好唄讀取
     */
    public boolean ready() throws IOException {
        return sd.ready();
    }
 
    /**
    * 關(guān)閉流并釋放資源
    */
    public void close() throws IOException {
        sd.close();
    }

四、InputStreamReader類與FileReader類關(guān)系

1、FileReader類僅僅是InputStreamReader的簡單衍生并未擴(kuò)展任何功能

2、FileReader類讀取數(shù)據(jù)實(shí)質(zhì)是InputStreamReader類在讀取,而InputStreamReader讀取數(shù)據(jù)實(shí)際是StreamDecoder類讀取

3、因此在使用字符輸入流的時(shí)候?qū)嶋H是StreamDecoder類在發(fā)揮作用

到此這篇關(guān)于一文詳解JAVA中InputStreamReader流的文章就介紹到這了,更多相關(guān) JAVA InputStreamReader流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位

    Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位

    這篇文章主要介紹了Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java 中的語法糖,真甜

    Java 中的語法糖,真甜

    語法糖(Syntactic sugar),也叫做糖衣語法,是英國科學(xué)家發(fā)明的一個(gè)術(shù)語,通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會.這篇文章主要介紹了Java 中的語法糖知識,需要的朋友可以參考下
    2020-12-12
  • Spring中Bean注入源碼示例解析

    Spring中Bean注入源碼示例解析

    這篇文章主要為大家介紹了Spring中Bean注入源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)

    詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)

    這篇文章主要為大家介紹了詳解Spark?Sql在UDF中如何引用外部數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java設(shè)計(jì)模式——工廠設(shè)計(jì)模式詳解

    Java設(shè)計(jì)模式——工廠設(shè)計(jì)模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式——工廠設(shè)計(jì)模式詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • spring boot使用sharding jdbc的配置方式

    spring boot使用sharding jdbc的配置方式

    這篇文章主要介紹了spring boot使用sharding jdbc的配置方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案

    這篇文章主要介紹了詳解基于MybatisPlus兩步實(shí)現(xiàn)多租戶方案,本文分兩步,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot整合WebService的實(shí)戰(zhàn)案例

    SpringBoot整合WebService的實(shí)戰(zhàn)案例

    WebService是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,平臺等,可以實(shí)現(xiàn)不同的語言間的相互調(diào)用,這篇文章主要給大家介紹了關(guān)于SpringBoot整合WebService的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Java Session驗(yàn)證碼案例代碼實(shí)例解析

    Java Session驗(yàn)證碼案例代碼實(shí)例解析

    這篇文章主要介紹了Java Session驗(yàn)證碼案例代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 面試必問項(xiàng)之Set實(shí)現(xiàn)類:TreeSet

    面試必問項(xiàng)之Set實(shí)現(xiàn)類:TreeSet

    這篇文章主要介紹了Java TreeSet類的簡單理解和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評論