最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中的OutputStreamWriter流解析

 更新時(shí)間:2023年10月16日 09:34:11   作者:咕嚕是個(gè)大胖子  
這篇文章主要介紹了JAVA中的OutputStreamWriter流解析,OutputStreamWriter提供了一種方便的方式將字符數(shù)據(jù)寫入到輸出流中,并進(jìn)行字符編碼轉(zhuǎn)換,它是Java中處理字符流和字節(jié)流之間轉(zhuǎn)換的重要工具之一,需要的朋友可以參考下

一、OutputStreamWriter流

API說明:OutputStreamWriter是從字符流到字節(jié)流的橋接:使用指定的字符集將寫入其中的字符編碼為字節(jié)。它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平臺(tái)的默認(rèn)字符集。 每次調(diào)用write()方法都會(huì)導(dǎo)致在給定字符上調(diào)用編碼轉(zhuǎn)換器。生成的字節(jié)在寫入底層輸出流之前在緩沖區(qū)中累積??梢灾付ù司彌_區(qū)的大小,但默認(rèn)情況下,它足夠大,可用于大多數(shù)用途。請(qǐng)注意,傳遞給write()方法的字符不會(huì)被緩沖。 為了獲得最高效率,請(qǐng)考慮在BufferedWriter中包裝OutputStreamWriter,以避免頻繁的轉(zhuǎn)換器調(diào)用

1)OutputStreamWriter是從字符流到字節(jié)流的橋接怎么理解?

1、字符的輸出需要通過字符流來操作,但是本質(zhì)最后還是通過字節(jié)流輸出到計(jì)算機(jī)上進(jìn)行存儲(chǔ)的

2、 因此OutputStreamWriter流的作用就是利用字節(jié)流作為底層輸出流然后構(gòu)建字符輸出流,字符輸出流輸出字符到流中,然后通過指定的字符集把流中的字符編碼成字節(jié)輸出到字節(jié)流中,其作用就是一個(gè)橋梁,使得雙方鏈接起來

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

OutputStreamWriter流中的構(gòu)造方法可以指定字符集,或者不設(shè)置取默認(rèn)值

3)每次調(diào)用write()方法都會(huì)導(dǎo)致在給定字符上調(diào)用編碼轉(zhuǎn)換器。生成的字節(jié)在寫入底層輸出流之前在緩沖區(qū)中累積怎么理解

OutputStreamWriter中存在一個(gè)字節(jié)緩沖區(qū),用于存儲(chǔ)每次輸出的字符編碼后的字節(jié),然后待字符輸出流輸出完畢一次性的將存儲(chǔ)的字節(jié)全部輸出給底層的字節(jié)輸出流

4)傳遞給write()方法的字符不會(huì)被緩沖怎么理解?

沒有理解清楚,因?yàn)閣rite()方法會(huì)傳遞字符作為方法實(shí)參,若該字符不緩沖,那緩沖區(qū)的字節(jié)從何而來~~~~~

5)考慮在BufferedWriter中包裝OutputStreamWriter,以避免頻繁的轉(zhuǎn)換器調(diào)用?

1、可以通過OutputStreamWriter對(duì)象來構(gòu)建BufferedWriter對(duì)象,以提高字符輸出的效率,

2、OutputStreamWriter中頻繁的調(diào)用了字符編碼器進(jìn)行轉(zhuǎn)換,而這樣的轉(zhuǎn)換過程是很耗資源的?

public class OutputStreamWriter extends Writer{}

二、OutputStreamWriter流構(gòu)造函數(shù)

1)利用輸出流構(gòu)建默認(rèn)字符編碼的OutputStreamWriter流:本質(zhì)是初始化StreamEncoder對(duì)象

      private final StreamEncoder se;
 
      public OutputStreamWriter(OutputStream out) {
        super(out);
        try {
            se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);
        } catch (UnsupportedEncodingException e) {
            throw new Error(e);
        }
    }

2)通過指定的字符編碼構(gòu)建OutputStreamWriter流:本質(zhì)是初始化StreamEncoder對(duì)象但是指定了字符編碼

    public OutputStreamWriter(OutputStream out, String charsetName)
        throws UnsupportedEncodingException
    {
        super(out);
        if (charsetName == null)
            throw new NullPointerException("charsetName");
        se = StreamEncoder.forOutputStreamWriter(out, this, charsetName);
    }

3)FileWriter類構(gòu)造調(diào)用OutputStreamWriter類構(gòu)造方法,而OutputStreamWriter類構(gòu)造方法本質(zhì)是在初始化StreamEncoder對(duì)象,因此最終的實(shí)現(xiàn)要去StreamEncoder源碼進(jìn)行查看

三、OutputStreamWriter流API

1)寫入一個(gè)字符到流中:本質(zhì)是調(diào)用StreamEncoder的write(int c)方法

    public void write(int c) throws IOException {
        se.write(c);
    }

2)寫入字符數(shù)組的一部分到流中:本質(zhì)上調(diào)用StreamEncoder的write(char cbuf[], int off, int len)方法

    public void write(char cbuf[], int off, int len) throws IOException {
        se.write(cbuf, off, len);
    }

3)寫入字符串的一部分到流中:本質(zhì)是調(diào)用StreamEncoder的write(String str, int off, int len)方法

    public void write(String str, int off, int len) throws IOException {
        se.write(str, off, len);
    }

4)刷新流中的數(shù)據(jù):本質(zhì)是調(diào)用StreamEncoder的flush()方法

  public void flush() throws IOException {
        se.flush();
    }

5)關(guān)閉流但是先刷新流:即該流必須要先調(diào)用flush方法然后再調(diào)用close方法

    public void close() throws IOException {
        se.close();
    }

6)OutputStreamWriter流的API和構(gòu)造方法本質(zhì)全部是調(diào)用StreamEncoder流的方法,因此需要了解OutputStreamWriter流的具體實(shí)現(xiàn)需要查看StreamEncoder流源碼才可知

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

相關(guān)文章

  • Spring Security學(xué)習(xí)之rememberMe自動(dòng)登錄的實(shí)現(xiàn)

    Spring Security學(xué)習(xí)之rememberMe自動(dòng)登錄的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于Spring Security學(xué)習(xí)之rememberMe自動(dòng)登錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • JAVA代理,靜態(tài),動(dòng)態(tài)詳解

    JAVA代理,靜態(tài),動(dòng)態(tài)詳解

    這篇文章主要介紹了Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 如何使用Comparator比較接口實(shí)現(xiàn)ArrayList集合排序

    如何使用Comparator比較接口實(shí)現(xiàn)ArrayList集合排序

    這篇文章主要介紹了如何使用Comparator比較接口實(shí)現(xiàn)ArrayList集合排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringMVC 通過ajax 實(shí)現(xiàn)文件上傳的步驟

    SpringMVC 通過ajax 實(shí)現(xiàn)文件上傳的步驟

    使用form表單在springmvc 項(xiàng)目中上傳文件,文件上傳成功之后往往會(huì)跳轉(zhuǎn)到其他的頁面,但是有的時(shí)候,文件上傳成功的同時(shí),并不需要進(jìn)行頁面的跳轉(zhuǎn),可以通過ajax來實(shí)現(xiàn)文件的上傳,下面給大家介紹SpringMVC 通過ajax 實(shí)現(xiàn)文件上傳的步驟,感興趣的朋友一起看看吧
    2025-05-05
  • IDEA搭建SpringBoot離線工程的方法

    IDEA搭建SpringBoot離線工程的方法

    這篇文章主要介紹了IDEA搭建SpringBoot離線工程的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java使用CKEditor實(shí)現(xiàn)圖片上傳功能

    java使用CKEditor實(shí)現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了java使用CKEditor實(shí)現(xiàn)圖片上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼

    Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼

    泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。本文將利用泛型實(shí)現(xiàn)簡單的棧結(jié)構(gòu),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • java實(shí)現(xiàn)定制數(shù)據(jù)透視表的示例詳解

    java實(shí)現(xiàn)定制數(shù)據(jù)透視表的示例詳解

    數(shù)據(jù)透視表(Pivot?Table)是一種數(shù)據(jù)分析工具,通常用于對(duì)大量數(shù)據(jù)進(jìn)行匯總、分析和展示,本文主要介紹了如何使用Java將計(jì)算項(xiàng)添加到數(shù)據(jù)透視表中,感興趣的可以了解下
    2023-12-12
  • Java生成Echarts表圖的2種實(shí)現(xiàn)方案

    Java生成Echarts表圖的2種實(shí)現(xiàn)方案

    這篇文章主要給大家介紹了關(guān)于Java生成Echarts表圖的2種實(shí)現(xiàn)方案,ECharts是一款功能非常強(qiáng)大的JavaScript圖表庫,文中通過代碼實(shí)例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • idea復(fù)制項(xiàng)目并重命名實(shí)現(xiàn)方式(項(xiàng)目另存為)

    idea復(fù)制項(xiàng)目并重命名實(shí)現(xiàn)方式(項(xiàng)目另存為)

    本文介紹了解決在Eclipse中復(fù)制項(xiàng)目時(shí)遇到的問題的方法,通過直接復(fù)制項(xiàng)目、刪除workspace.xml文件、修改iml文件以及重新打開項(xiàng)目,成功解決了問題,文章最后鼓勵(lì)讀者參考這些方法并給予支持
    2026-04-04

最新評(píng)論

广灵县| 容城县| 新化县| 鄂尔多斯市| 乌鲁木齐县| 广东省| 马公市| 宜川县| 桦川县| 江川县| 九寨沟县| 六盘水市| 同江市| 偃师市| 东海县| 嵊州市| 依兰县| 静宁县| 石狮市| 安义县| 红安县| 贵定县| 丰都县| 惠安县| 廊坊市| 濮阳市| 中山市| 桓仁| 丹棱县| 宁强县| 堆龙德庆县| 原平市| 保康县| 阜阳市| 兴海县| 桂东县| 海阳市| 林口县| 衡南县| 墨玉县| 福贡县|