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

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

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

概述

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

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

  • InputStreamReader
  • OutputStreamWriter

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

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

在默認情況下,是按照UTF-8編碼格式進行操作的

當我們將代碼中的文件編碼格式切換成其他編碼格式,再次執(zhí)行的時候就會出現(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你好
控制臺輸出:hello???

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

InputStreamReader

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

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

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

傳入一個InputStream對象,而且可以指定處理的編碼方式

示例

字節(jié)流FileInputStream包裝成(轉(zhuǎn)換流)字符流InputStreamReader,對文件進行讀?。ò凑誙TF-8格式),進而包裝成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();
            }
        }
    }
}

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

OutputStreamWriter

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

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

  • 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保存文件成功");
        }
    }
}

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

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

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

相關(guān)文章

  • 如何在Java中實現(xiàn)一個散列表

    如何在Java中實現(xiàn)一個散列表

    這篇文章主要介紹了如何在Java中實現(xiàn)一個散列表,建一個HashMap,以String類型為Key,Int類型為Value,下文具體的操作過程需要的小伙伴可以參考一下
    2022-04-04
  • springcloud + mybatis + seate集成示例

    springcloud + mybatis + seate集成示例

    本文主要介紹了springcloud + mybatis + seate集成示例,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • SpringBoot中的PUT和Delete請求使用

    SpringBoot中的PUT和Delete請求使用

    這篇文章主要介紹了SpringBoot中的PUT和Delete請求使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 最新評論