转换流InputStreamReader、OutputStreamWriter

转换流什么使用。

字符和字节之间的桥梁(转换流),通常,涉及到字符编码转换时,需要用到转换流。

InputStreamReaderDemo:

 1 import java.io.*;
 2 //为方便演示便省略异常处理。
 3 class SystemDemo2
 4 {
 5     public static void main(String[] args)throws IOException
 6     {
 7         InputStream in = System.in;
 8         InputStreamReader ins = new InputStreamReader(in);
 9         BufferedReader bufr = new BufferedReader(ins);
10         while (true)
11         {
12             String s = bufr.readLine();
13             System.out.println(s.toUpperCase());
14             if (s.equals("over"))
15             {
16                 break;
17             }
18         }
19         //bufr.close();爆出了无法访问的语句,可能是此缓存区最终的数据时键盘所以无需关闭流。
20     }
21 }
View Code

键盘的最常见写法:

BufferedReader bufr = new BufferedReader(new InputStream(System.in));

OutputStreamWriterDemo:

 1 import java.io.*;
 2 class OutputStreamReaderDemo
 3 {
 4     public static void main(String[] args) throws IOException
 5     {
 6         OutputStream out = System.out;//创建输出对象。
 7         OutputStreamWriter outw = new OutputStreamWriter(out);//转换流对象,将需要转换的字节流作为参数传入转换流对象
 8         BufferedWriter bufw = new BufferedWriter(outw);//缓冲区
 9         bufw.write("afd");//调用写出方法
10         bufw.flush();//刷新
11         bufw.close();//关闭资源
12 //        //三行变一行输出方式
13 //        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
14     }
15 }
View Code

InputStream、OutputSreamDemo:(综合)

 1 import java.io.*;
 2 
 3 class  TransStreamDemo
 4 {
 5     public static void main(String[] args) throws IOException
 6     {
 7         //获取键盘录入对象。
 8         //InputStream in = System.in;
 9 
10         //将字节流对象转成字符流对象,使用转换流。InputStreamReader
11         //InputStreamReader isr = new InputStreamReader(in);
12 
13         //为了提高效率,将字符流进行缓冲区技术高效操作。使用BufferedReader
14 
15         //BufferedReader bufr = new BufferedReader(isr);
16 
17 
18         //键盘的最常见写法。
19         BufferedReader bufr = 
20                 new BufferedReader(new InputStreamReader(System.in));
21 
22 
23 
24 
25 
26         
27 //        OutputStream out = System.out;
28 //        OutputStreamWriter osw = new OutputStreamWriter(out);
29 //        BufferedWriter bufw = new BufferedWriter(osw);
30         BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
31 
32 
33 
34 
35         String line = null;
36 
37         while((line=bufr.readLine())!=null)
38         {
39             if("over".equals(line))
40                 break;
41             bufw.write(line.toUpperCase());
42             bufw.newLine();
43             bufw.flush();
44         }
45 
46         bufr.close();
47 
48     }
49 }
View Code

 

流操作的基本规律:

通过三个明确来完成。

1,明确源和目的。
  源:输入流。InputStream Reader
  目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
  是:字符流。
  不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
  通过设备来进行区分:
  源设备:内存,硬盘。键盘
  目的设备:内存,硬盘,控制台。

Demo:

 1 import java.io.*;
 2 /*
 3     需求:
 4         首先利用三个明确,将一个文本文件打印到控制台上。
 5 */
 6 class test1
 7 {
 8     public static void main(String [] args)throws IOException
 9     {
10         /*
11             1.明确源与目的
12                 源:InputStream    Reader 
13                 Reader
14                 目的:OutputStream Writer
15                 Writer
16             
17             2.是否是文本文件?
18                 是!
19                 字符流(Reader、Writer)
20             是否提高效率
21                 是!加入缓冲区技术
22             3.通过设备进行区分,确定要使用哪个具体的对象
23             源设备:硬盘。
24             目的设备:控制台。
25         */
26         //源。
27         BufferedReader bufr = 
28             new BufferedReader(new FileReader("F:\\线程、IO、集合框架\\代码示例\\day19\\装饰和继承.java"));
29         //目的
30         BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
31 
32         String line = null;
33         while ((line=bufr.readLine())!=null)
34         {
35             bufw.write(line);
36             bufw.newLine();
37             bufw.flush();
38         }
39         bufr.close();
40         bufw.close();
41     }
42 }
View Code

 

posted @ 2015-11-01 23:16  坚持坚持再坚持  阅读(269)  评论(0编辑  收藏  举报