java基础:IO流之转换流

简介

转换流提供了在字节流和字符流之间的转换

JavaAPI提供了两个转换流:

  • InputStreamReader:将InputStream转换为Reader
  • OutputStreamWriter:将Writer转换为OutputStream

字节流中的数据都是字符时,转成字符流操作更高效。

很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能。

image-20210423093829206

解码:字节、字节数组 ==> 字符数组、字符串

编码:字符数组、字符串 ==> 字节、字节数组

InputStreamReader和OutputStreamWriter都是字符流。

InputStreamReader的使用

测试:

    @Test
    public void test(){
        //指定字符集(根据文本字符集决定)
        //字节流转换成字符流
        try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8)){
            int len;
            char[] cBuf = new char[5];
            while((len = isr.read(cBuf)) != -1){
                String str = new String(cBuf, 0, len);
                System.out.print(str);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

OutputStreamWriter的使用

下面实现将UTF-8文件转换成gbk文件

    @Test
    public void test2(){
        //指定字符集(根据文本字符集决定)
        //字节流转换成字符流
        try(InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), StandardCharsets.UTF_8);
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello-gbk.txt"),"gbk")){
            int len;
            char[] cBuf = new char[5];
            while((len = isr.read(cBuf)) != -1){
                String str = new String(cBuf, 0, len);
                osw.write(str);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

转换后:hello-gbk.txt用utf8读取就会乱码,需要用gbk读取,如下图

image-20210423103211400

准换为gbk读取后,可以读取

image-20210423104852507

原文地址:https://www.cnblogs.com/wwjj4811/p/14692798.html