一.字符编码和字符集

1.字符编码

编码:字符(看的懂的)-->字节(看不懂的)
解码:字节(字节(看不懂的))-->字符(看的懂的)
字符编码:一套自然语言的字符和二进制数之间对应的规则
编码表:生活中的文字和计算机中二进制的对应规则

2.字符集

1)ASCII字符集:基于拉丁字母的一套电脑编码:8bits代表一个字符,共256个字符,用于显示现代英语

2)ISO-8859-1字符集::拉丁码表,用于显示欧洲使用的语言

3)GBxxx字符集:用于显示中文:GB2312(2个字节代表1个中文),GBK,GB18030

4)Unicode字符集:统一码,用于显示任意语言:UTF-8(3个字节代表1个中文),UTF-16,UTF-32

二.OutputStreamWriter

1.概念

java.io.OutputStreamWriter  extends Writer
OutputStreamWriter:是字符流通向字节流的桥梁;使用指定的字符集将写入其中的字符编码为字节

2.构造方法

OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)创建一个使用命名字符集的OutputStreamWriter。
参数:
    OutputStream out:字节输出流
    String charsetName:指定的编码表名称,不区分大小写:utf-8,gbk,,默认使用utf-8

3.实现步骤

//1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定编码表名称
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("G:\\a.txt"), "utf-8");
//2.使用OutputStreamWriter对象的方法writer,把字符转换为字节存储到缓冲区中(编码)
        osw.write("你好");
//3. 使用OutputStreamWriter对象中的方法flush,把内存中缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
        osw.flush();
//4.释放资源
        osw.close();

三.InputStreamReader

1.概念

java.io.InputStreamReader extend Reader
InputStreamReader:是从字节流到字符流的桥;它读取字节,并使用指定的charset将其解码为字符 。

2.构造方法

InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, String charsetName)创建一个使用命名字符集的InputStreamReader。

3.实现步骤

//1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
        InputStreamReader isr = new InputStreamReader(new FileInputStream("G:\\a.txt"), "utf-8");
//2.使用InputStreamReader对象中的方法read读取文件
        int len = 0;
        while ((len = isr.read()) != -1) {
            System.out.println((char) len);
        }
//3.释放资源
        isr.close();