字符流中的编码解码问题
字符流中的编码解码问题
-
字符抽象基类
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(); }}
输出的内容