转换流

1 转换流OutputStreamWriter

  • java.io.OutputStreamWriter 继承Writer类;
  • OutputStreamWriter(OutputStream out)
  • 就是一个字符输出流,写文本文件;
  • 可以将字符流转成字节流;
    这里写图片描述

2 InputStreamReader

  • java.io.InputStreamReader 继承Reader;
  • InputStreamReader(InputStream in),接收所有字节输入流;
  • InputStreamReader(InputStream in,String charsetName) 传递编码表的名字
  • 字符输入流,读取文本文件;
  • 字节流向字符的桥梁,将字节流转为字符流;

2.1 读取方法

  • read() 读取1个字符,读取字符数组;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
        readUTF();
    }

    /**
     * 转换流,InputStreamReader 读取文本
     * 采用UTF-8 编码表,读取文件
     */
    public static void readUTF() throws IOException {
        //创建输入流,传递文本文件
        FileInputStream fis = new FileInputStream("h:\\test\\utf.txt");
        //创建转换流对象,构造方法中包装字节输入流,同时写编码表名
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        char[] ch = new char[1024];
        int len = isr.read(ch);
        System.out.println(new String(ch,0,len));
        isr.close();
    }

    public static void readGBK() throws IOException {
        //创建输入流,读取文本文件
        FileInputStream fis = new FileInputStream("h:\\test\\gbk.txt");
        //创建转换流对象,构造方法,包装字节输入流
        InputStreamReader isr = new InputStreamReader(fis);
        char[] ch = new char[1024];
        int len = isr.read(ch);
        System.out.println(new String(ch, 0, len));

        isr.close();
    }
}

3 转换流和子类的关系

  • FileWriter extends OutputStreamWriter;
  • FileReader extends InputStreamReader;
    父类和子类的功能的区别?

  • OutputStreamWriterInputStreamReader 是字符和字节的桥梁,即字符转换流。它的原理:字节流+编码表;

  • FileWriterFileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作,简化了代码;
  • -

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/79882150
今日推荐