293 字符流
字符流抽象基类
Reader 字符输入流的抽象类
Writer 字符输出流的抽象类
·
字符流中和编码解码问题相关的两个类
InputStreamReader,InputStreamReader是从字节流到字符流的桥接器:它使用指定的charset读取字节并将其解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
OutputStreamWriter,OutputStreamWriter是从字符流到字节流的桥接器:使用指定的charset将写入其中的字符编码为字节。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
(查看这两个类的帮助文档)
构造器 描述
OutputStreamWriter(OutputStream out) 创建使用默认字符编码的OutputStreamWriter。例如 OutputStreamWriter(fos)
OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定charset的OutputStreamWriter。OutputStreamWriter(fos,UTF-8)
构造器 描述
InputStreamReader(FileInputStream in) 创建一个使用默认字符集的InputStreamReader。
InputStreamReader(FileInputStream in, String charsetName) 创建一个使用指定charset的InputStreamReader。
InputStreamReader(FileInputStream in, Charset cs) 创建一个使用给定charset的InputStreamReader。
InputStreamReader(FileInputStream in, CharsetDecoder dec) 创建一个使用给定charset解码器的InputStreamReader。
【报错了】
出问题了
读数据的代码写完,控制台一片空空?
——调整了close语句的顺序以后就正常了。哪个对象的close,就写在用完这个对象之后。然后再写其他的。不需要把所有close语句拎出来排一起
--------------------------------------------------------------
1 package e293;2
3 import java.io.*;4
5 //original edition
6 public class ConversionDemo {
7 public static void main(String[] args) throws IOException {
8 FileOutputStream fos293a = new FileOutputStream("myCharStream\src\e293\e293a.txt");
9 OutputStreamWriter osw293a = new OutputStreamWriter(fos293a);
10 OutputStreamWriter osw293b = new OutputStreamWriter(new FileOutputStream("myCharStream\src\e293\e293b.txt"), "UTF-8");
11 OutputStreamWriter osw293c = new OutputStreamWriter(new FileOutputStream("myCharStream\src\e293\e293c.txt"), "GBK");
12 InputStreamReader isr293a = new InputStreamReader(new FileInputStream("myCharStream\src\e293\e293a.txt"));
13 InputStreamReader isr293b = new InputStreamReader(new FileInputStream("myCharStream\src\e293\e293b.txt"), "GBK");
14
15 osw293a.write("这一次用默认字符集");//输出这一次用默认字符集
16 osw293a.close();
17 osw293b.write("这一次指定字符集UTF-8");//输出这一次指定字符集UTF-8
18 osw293b.close();
19 osw293c.write("这一次指定字符集GBK");//乱码了,这是因为IDEA用UTF-8,这种只能用指定字符集的InputStreamReader才能读出来
20 osw293c.close();
21
22 //解码
23 int ch;
24 System.out.println("t用默认规则解码默认规则编码的文件");
25 while ((ch = isr293a.read()) != -1) {
26 System.out.print((char) ch);
27 }
28 System.out.println();
29 isr293a.close();
30 //解码
31 int chh;
32 System.out.println("t用GBK解码UTF-8编码的文件");
33 while ((chh = isr293b.read()) != -1) {
34 System.out.print((char) chh);
35 }
36 System.out.println();
37 isr293b.close();
38 }
39 }
40



