转换流 -解决输入输出时编码格式不统一的问题

转换流


  • 解决编码格式不统一,出现乱码问题
  • idea默认utf-8,Windows系统中文默认GBK,如,文件默认保存编码格式为GBK,在FileReader时会报错

InputStreamReader


  • java.lang.Object
    继承者 java.io.Reader
    继承者 java.io.InputStreamReader
    因此拥有Reader的共性方法

  • 是FileReader的父类

  • InputStreamReader读InputStream送过来的字节时,会查询idea默认码表UTF-8,也可以查询指定的编码表,进行解码。

  • 构造方法:

    1. InputStreamReader(InputStream in)
      创建一个使用默认字符集的 InputStreamReader。
    2. InputStreamReader(InputStream in, String charsetName)
      创建使用指定字符集的 InputStreamReader。
package convertedStream;

import java.io.*;

public class converted {
    public static void main(String[] args) throws IOException {
        //1.创建转换流,绑定输入文件,并指定编码格式
        InputStreamReader inre = new InputStreamReader(new FileInputStream("b.txt"),"gbk");
        //2.读入内存中
        char[] chars = new char[1024];
        int len = 0;
        while((len =inre.read(chars)) != -1){
            System.out.println(chars);
        }
        //3.释放资源
        inre.close();
    }
}

OutputStreamWriter


  • java.lang.Object
    继承者 java.io.Writer
    继承者 java.io.OutputStreamWriter
    因此拥有Writer的共性方法
  • 是FileWriter的父类
  • OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。编码过程。
  • 构造方法:
    1. OutputStreamWriter(OutputStream out)
      创建使用默认字符编码的 OutputStreamWriter。
    2. OutputStreamWriter(OutputStream out, String charsetName)
      创建使用指定字符集的 OutputStreamWriter。
      String charsetName:是编码表名称,不区分大小写,常用的有utf-8/GBK/。。。
      不指定默认使用utf-8
package convertedStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class converted {
    public static void main(String[] args) throws IOException {
        //1.创建转换流,绑定输出对象
        OutputStreamWriter otw = new OutputStreamWriter(new FileOutputStream("b.txt"),"gbk");
        //2.默认会以utf-8写入,OutputStreamWriter - FileOutputStream - 写入
        otw.write("你好呀");
        //3.释放资源
        otw.close();
    }
}
posted @ 2019-09-29 17:45  学之初  阅读(654)  评论(0编辑  收藏  举报