字符流中的编码解码问题
-
字符抽象基类
Reader:字符输入流的基类
Writer:字符输出流的基类 -
字符流中和编码解码问题相关的两个类
字符流=字节流+指定编码
以OutputStreamWriter为主:
-
public class InputStreamReader extends ReaderInputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
-
public class OutputStreamWriter extends WriterOutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
- 汉字的存储:
如果是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();
}
}
输出的内容