字符流中编码解码问题
字符流抽象基类:
- Reader:字符输入流的抽象类
- Writer:字符输出流的抽象类
字符流中和编码和解码问题相关的两个类:
- InputStreamReader:是从字节流到字符流的桥梁,它读取字节并使用指定的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
- OutputStreamWriter:是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节,它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
使用平台默认字符集:
package com.characterstream;
import java.io.*;
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("基础语法\\osw.txt"));
osw.write("中国");
osw.close();
//InputStreamReader(InputStream in):创建一个使用默认字符集的InputStreamReader
InputStreamReader isr = new InputStreamReader(new FileInputStream("基础语法\\osw.txt"));
//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1){
System.out.print((char)ch);
}
isr.close();
}
}
使用指定的GBK字符集
package com.characterstream;
import java.io.*;
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream out, String charsetName)
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("基础语法\\osw.txt","GBK"));
osw.write("中国");
osw.close();
//InputStreamReader(InputStream in, String charsetName):创建一个使用命名字符集的InputStreamReader
InputStreamReader isr = new InputStreamReader(new FileInputStream("基础语法\\osw.txt","GBK"));
//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1){
System.out.print((char)ch);
}
isr.close();
}
}