转换流InputStreamReader、OutputStreamWriter
转换流什么使用。
字符和字节之间的桥梁(转换流),通常,涉及到字符编码转换时,需要用到转换流。
InputStreamReaderDemo:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
键盘的最常见写法:
BufferedReader bufr = new BufferedReader(new InputStream(System.in));
OutputStreamWriterDemo:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
InputStream、OutputSreamDemo:(综合)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
流操作的基本规律:
通过三个明确来完成。
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
Demo:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }