> 文档中心 > 字符流中的编码解码问题

字符流中的编码解码问题


字符流中的编码解码问题

  1. 字符抽象基类
    Reader:字符输入流的基类
    Writer:字符输出流的基类

  2. 字符流中和编码解码问题相关的两个类
    字符流=字节流+指定编码

以OutputStreamWriter为主
柏维怡我爱你

  • public class InputStreamReader extends ReaderInputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
    柏维怡我爱你

  • public class OutputStreamWriter extends WriterOutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
    柏维怡我爱你

  1. 汉字的存储:
    如果是GBK编码是2个字节
    如果是UTF-8编码,占用3个字节

以图文和代码的形式讲解

图文:
柏维怡我爱你
代码:

package Demo;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.Arrays;public class Demo {    public static void main(String[] args) throws IOException {  //字符流=字节流+指定编码 //创建一个默认字符集输出解码 OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("D:\\item\\Hellow\\java.txt"),"UTF-8"); ow.write("中国\r\n"); ow.write("陕西省西安市"); //刷新流 ow.flush(); //创建一个默认字符集输入编码 InputStreamReader ir = new InputStreamReader(new FileInputStream("D:\\item\\Hellow\\java.txt"),"UTF-8"); //这里的读写或者复制跟字节流没有区别------一次复制一个字符形式 int by; while ((by=ir.read())!=-1){     System.out.print((char)by); } //释放资源 ow.close(); ir.close();    }}

输出的内容
柏维怡我爱你

字符流和字节流的读取复制功能几乎是一样,可以有效方便我们记忆

牙刷城