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

Java轉(zhuǎn)換流(InputStreamReader/OutputStreamWriter)的使用

 更新時(shí)間:2023年01月28日 10:52:08   作者:墨辰JC  
本文主要介紹了Java轉(zhuǎn)換流(InputStreamReader/OutputStreamWriter)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

轉(zhuǎn)換流是字節(jié)流到字符流的橋梁,在轉(zhuǎn)換的過程中,可以指定編碼。轉(zhuǎn)換流也是一種處理流,它提供了字節(jié)流和字符流之間的轉(zhuǎn)換。

轉(zhuǎn)換流的兩個(gè)類

  • InputStreamReader
  • OutputStreamWriter

為什么會(huì)有轉(zhuǎn)換流?

眾所周知,計(jì)算機(jī)中存儲(chǔ)的數(shù)據(jù)都是二進(jìn)制的數(shù)字,我們?cè)陔娔X屏幕上看到的文字信息是將二進(jìn)制轉(zhuǎn)換之后顯示的,兩者之間存在編碼與解碼的過程,其互相轉(zhuǎn)換必須遵循某種規(guī)則,即編碼和解碼都遵循同一種規(guī)則才能將文字信息正常顯示,如果編碼跟解碼使用了不同的規(guī)則,就會(huì)出現(xiàn)亂碼的情況。

在默認(rèn)情況下,是按照UTF-8編碼格式進(jìn)行操作的

當(dāng)我們將代碼中的文件編碼格式切換成其他編碼格式,再次執(zhí)行的時(shí)候就會(huì)出現(xiàn)亂碼

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CodeQuestion {
    public static void main(String[] args) {
        //讀取E盤下a.txt文件
        String filePath = "E:\\a.txt";
        BufferedReader bufferedReader = null;

        try {
            bufferedReader = new BufferedReader(new FileReader(filePath));
            String file = bufferedReader.readLine();
            System.out.println(file);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

文件中內(nèi)容:hello你好
控制臺(tái)輸出:hello???

而轉(zhuǎn)換流可以指定文件的編碼方式,從而解決問題

InputStreamReader

InputStreamReader:Reader的子類,將字節(jié)輸入流轉(zhuǎn)換為字符輸入流。是字節(jié)流通向字符流的橋梁。如果不指定字符集編碼,該解碼過程將使用平臺(tái)默認(rèn)的字符編碼,如:GBK。

該類提供了4個(gè)構(gòu)造方法,根據(jù)不同的場(chǎng)景進(jìn)行選擇操作

InputStream:表示字節(jié)輸入流charset:表示編碼方式

傳入一個(gè)InputStream對(duì)象,而且可以指定處理的編碼方式

示例

字節(jié)流FileInputStream包裝成(轉(zhuǎn)換流)字符流InputStreamReader,對(duì)文件進(jìn)行讀?。ò凑誙TF-8格式),進(jìn)而包裝成BufferedReader
讀取E盤下的文件(read方法)

import java.io.*;

public class InputStreamReader_ {
    public static void main(String[] args) {
        String filePath = "E:\\a.txt";
        BufferedReader bufferedReader = null;
        try {
            InputStreamReader gbk = new InputStreamReader(new FileInputStream(filePath), "GBK");
            bufferedReader = new BufferedReader(gbk);
            //下面為第二種寫法,通常使用第二種
            //bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"GBK"));
            String s;
            while ((s = bufferedReader.readLine()) != null) {
                System.out.println(s);
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();//關(guān)閉外層流即可
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

此時(shí)文件本體的編碼為ANSI,所以如果不按照GBK編碼方式進(jìn)行讀取,則采用默認(rèn)編碼方式,會(huì)產(chǎn)生亂碼

OutputStreamWriter

OutputStreamWriter:Writer的子類,將字節(jié)輸出流轉(zhuǎn)換為字符輸出流。是字符流通向字節(jié)流的橋梁。如果不指定字符集編碼,該解碼過程將使用平臺(tái)默認(rèn)的字符編碼,如:GBK。

該類提供了4個(gè)構(gòu)造方法,根據(jù)不同的場(chǎng)景進(jìn)行選擇操作

  • OutputStream:表示字節(jié)輸出流
  • Charset:表示編碼格式

示例

寫入數(shù)據(jù)到E盤下的文件(write方法)

import java.io.*;

public class OutputStreamWriter_ {
    public static void main(String[] args) {
        String filePath = "E:\\test.txt";
        OutputStreamWriter utf8 = null;
        try {
            utf8 = new OutputStreamWriter(new FileOutputStream(filePath), "UTF8");
            try {
                utf8.write("hello世界");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                utf8.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("按照utf-8保存文件成功");
        }
    }
}

此時(shí)E盤下的test.txt文件的內(nèi)容為UTF-8編碼格式

當(dāng)處理純文本數(shù)據(jù)時(shí),如果使用字符流效率更高,并且可以有效解決中文問題,所以建議將字節(jié)流轉(zhuǎn)換為字符流,使用的時(shí)候可以指定相應(yīng)的編碼格式。(如:UTF-8,GBK,GB2312,ISO8859-1等)

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

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)調(diào)用自定義的應(yīng)用程序((最新推薦)

    SpringBoot實(shí)現(xiàn)調(diào)用自定義的應(yīng)用程序((最新推薦)

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)調(diào)用自定義的應(yīng)用程序的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Mybatis攔截器的實(shí)現(xiàn)介紹

    Mybatis攔截器的實(shí)現(xiàn)介紹

    MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實(shí)這是攔截器功能。MyBatis 允許你在已映射語(yǔ)句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。下面通過本文給大家介紹Mybatis攔截器知識(shí),感興趣的朋友一起看看吧
    2016-10-10
  • java中BigDecimal進(jìn)行加減乘除的基本用法

    java中BigDecimal進(jìn)行加減乘除的基本用法

    大家應(yīng)該對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double運(yùn)算,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作。下面這篇文章就給大家介紹介紹關(guān)于java中BigDecimal進(jìn)行加減乘除的基本用法。
    2016-12-12
  • Java 中的CharArrayReader 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java 中的CharArrayReader 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    CharArrayReader 是字符數(shù)組輸入流。它和ByteArrayInputStream類似,只不過ByteArrayInputStream是字節(jié)數(shù)組輸入流,而CharArray是字符數(shù)組輸入流。CharArrayReader 是用于讀取字符數(shù)組,它繼承于Reader
    2017-05-05
  • Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容

    Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容

    這篇文章主要介紹了Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java使用回溯法求解數(shù)獨(dú)示例

    java使用回溯法求解數(shù)獨(dú)示例

    這篇文章主要介紹了java使用回溯法求解數(shù)獨(dú)示例,大家參考使用吧
    2014-01-01
  • Java程序包不存在的3種解決方法總結(jié)

    Java程序包不存在的3種解決方法總結(jié)

    包存在的,但是啟動(dòng)項(xiàng)目的時(shí)候提示包不存在,所以解決下,這篇文章主要給大家介紹了關(guān)于Java程序包不存在的3種解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • java中的可變參數(shù)使用方法

    java中的可變參數(shù)使用方法

    這篇文章主要介紹了java中的可變參數(shù)使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Java中的時(shí)間處理與時(shí)間標(biāo)準(zhǔn)

    詳解Java中的時(shí)間處理與時(shí)間標(biāo)準(zhǔn)

    這篇文章主要為大家詳細(xì)介紹了三個(gè)時(shí)間標(biāo)準(zhǔn)GMT,CST,UTC的規(guī)定,以及Java進(jìn)行時(shí)間處理的相關(guān)知識(shí),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • 淺析Java8 中 Map 接口的新方法

    淺析Java8 中 Map 接口的新方法

    這篇文章主要介紹了Java8 中 Map 接口的新方法,本文通過代碼實(shí)例給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

山东省| 临猗县| 元阳县| 靖安县| 天全县| 密山市| 辽宁省| 秭归县| 洞头县| 六盘水市| 龙游县| 恭城| 长丰县| 光山县| 博乐市| 嘉峪关市| 安龙县| 宁夏| 绥芬河市| 怀柔区| 荥经县| 阆中市| 平原县| 彭州市| 舞钢市| 宜川县| 自贡市| 东丰县| 宁乡县| 出国| 云阳县| 普洱| 淮安市| 都兰县| 太原市| 富裕县| 共和县| 吉木乃县| 郯城县| 正定县| 黔西县|