java学习笔记(9)——IO系统 转换流

字符编码
解码:字符(能看懂的) --> 字节(看不懂的)
解码:字节(看不懂的) --> 字符(能看懂的)
编码表:生活中文字和计算机中二进制的对应规则
字符集(编码表):一个系统支持的所有字符的集合

字节流与字符流之间的桥梁:可以指定查询码表
OutputStreamWriter
InputStreamReader

转换流原理:

java学习笔记(9)——IO系统 转换流_第1张图片

OutputStreamWriter

java.io.OutputStreamWriter extends Writer
用指定的charset(编码表)将要写入流中的字符编码成字节-->编码

java学习笔记(9)——IO系统 转换流_第2张图片

构造方法:

OutputStreamWriter(OutputStream out):创建默认**字符编码**的OutputStreamWriter
OutputStreamWriter(OutputStream out, String charsetName):创建指定字符集的OutputStreamWriter

参数:
    OutputStream out:字节输出流,可以用来写转换之后的字节到文件中
    String charsetName:指定编码表名称,不区分大小写

使用步骤:

  1. 创建OutputStreamWriter对象,构造方法中传递字节输出流和指定编码表名称
  2. 使用OutputStreamWriter对象中write方法,把字符转换为字节存储到缓冲区
  3. 使用OutputStreamWriter对象中flush方法,把内存缓冲区中的字节刷新到文件中(使用字节流写字节过程)
  4. 释放资源
    public static void main(String[] args) throws IOException {
        write_utf_8();
    }

    private static void write_utf_8() throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\z.txt"), "utf-8");
        osw.write("你好");
        osw.flush();
        osw.close();
    }

java学习笔记(9)——IO系统 转换流_第3张图片

    public static void main(String[] args) throws IOException {
//        write_utf_8();
        write_gbk();
    }

    private static void write_gbk() throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\gbk.txt"), "GBK");
        osw.write("你好");
        osw.flush();
        osw.close();
    }

java学习笔记(9)——IO系统 转换流_第4张图片

OutputStreamReader

java.io.InputStreamReader extends Reader
用指定的charset(编码表)读取字节并将其解码为字符-->解码

image.png

构造方法:

InputStreamReader(IntputStream in):创建默认**字符集**的OutputStreamReader
InputStreamReader(InputStream in, String charsetName):创建指定字符集的InputStreamReader

参数:
    IntputStream in:字节输入流,用来读取文件中保存的字节
    String charsetName:指定编码表名称,不区分大小写

使用步骤:

  1. 创建InputStreamReader对象,构造方法中传递字节输入流和指定编码表名称
  2. 使用InputStreamReader对象中read方法,读取文件
  3. 释放资源

注意事项:
构造方法中指定的编码表名称要和文件的编码相同

    public static void main(String[] args) throws IOException {
        read_utf_8();
        read_gbk();
    }

    private static void read_gbk() throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\GBK.txt"), "GBK");
        int len = 0;
        while((len = isr.read()) != -1) {
            System.out.println((char) len);
        }

        isr.close();
    }

    private static void read_utf_8() throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\z.txt"), "utf-8");
        int len = 0;
        while((len = isr.read()) != -1) {
            System.out.println((char) len);
        }

        isr.close();
    }

java学习笔记(9)——IO系统 转换流_第5张图片

案例

将GBK编码的文件,转换为utf-8编码的文本文件
java学习笔记(9)——IO系统 转换流_第6张图片

    public static void main(String[] args) throws IOException {
        //先将GBK文件中数据转换为字节,使用InputStreamReader
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\gbk.txt"), "GBK");
        //定义utf-8文件,准备存储以utf-8格式编码的
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\utf.txt"), "utf-8");

        int len = 0;
        while((len = isr.read()) != -1) {
            osw.write(len);
        }
        osw.close();
        isr.close();
    }

你可能感兴趣的:(java)