首页 > 代码库 > Java之IO转换流

Java之IO转换流

直接上码:
 
读取键盘录入数据代码演示:
 
 
import java.io.IOException;import java.io.InputStream;  /** *读取键盘录入的数据,并打印在控制台上。 * *键盘本身就是一个标准的输入设备, *对于Java而言, */public class ReadKey {  /**  * @param args  * @throws IOException  */ public static void main(String[] args) throws IOException {// readKey();  readKey_2(); }  public static void readKey() throws IOException {  InputStream in = System.in;   int ch = in.read();  System.out.println(ch);  int ch1 = in.read();  System.out.println(ch1);  int ch2 = in.read();  System.out.println(ch2);  }  /**  * 获取用户键盘录入的数据,  * 并将数据变成大写显示在控制台上,  * 如果用户输入的是over,则结束键盘录入  *  * 思路:  * 1,因为键盘录入只读取一个字节,要判断是否是over,需要先将读到的字节拼成字符串   * 2,那就需要一个容器。可以使用StringBuilder  * 3,在用户回车之前将录入的数据变成字符串判断即可。  * @throws IOException  */ public static void readKey_2() throws IOException {  //创建容器  StringBuilder sb = new StringBuilder();  //获取键盘读取流  InputStream in = System.in;  //定义变量记录读取到的字节,并循环读取。  int ch = 0;  while((ch = in.read())!=-1){   //在存储之前需要判断是否是换行标记,因为换行标记不存   if(ch == ‘\r‘)    continue;   if(ch == ‘\n‘){    String temp = sb.toString();    if("over".equals(temp))     break;    System.out.println(temp.toUpperCase());    sb.delete(0,sb.length());   }else{    sb.append((char)ch);   }  } }} 

  

流转换:
    字节流转换成字符流InputStreamReader
 
 
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader; public class TransStreamDemo {  /**  * @param args  * @throws IOException  */ public static void main(String[] args) throws IOException {  //字节流  InputStream in = System.in;  //将字节转换成字符的桥梁,即转换流。  InputStreamReader isr = new InputStreamReader(in);   //字符流  BufferedReader bufr = new BufferedReader(isr);  String line = null;  while((line=bufr.readLine())!=null){   if("over".equals(line)){    break;   }   System.out.println(line.toUpperCase());  } }}

  

 
    字符流转换成字节流OutputStreamWriter
 
 import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter; public class TransStreamDemo {  /**  * @param args  * @throws IOException  */ public static void main(String[] args) throws IOException {  //字节流  InputStream in = System.in;  //将字节转换成字符的桥梁,即转换流。  InputStreamReader isr = new InputStreamReader(in);   //字符流  BufferedReader bufr = new BufferedReader(isr);   OutputStream out = System.out;  OutputStreamWriter osw = new OutputStreamWriter(out);  BufferedWriter bufw = new BufferedWriter(osw);   String line = null;  while((line=bufr.readLine())!=null){   if("over".equals(line)){    break;   }   bufw.write(line.toUpperCase());   bufw.newLine();   bufw.flush();  } }}

  

        代码重写
 
 
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; public class TransStreamDemo {  /**  * @param args  * @throws IOException  */ public static void main(String[] args) throws IOException {  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));   String line = null;  while((line=bufr.readLine())!=null){   if("over".equals(line)){    break;   }   bufw.write(line.toUpperCase());   bufw.newLine();   bufw.flush();  } }} 

  

        复制文件代码演示
 
 
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; public class TransStreamDemo {  /**  * @param args  * @throws IOException  */ public static void main(String[] args) throws IOException {  BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));  String line = null;  while((line=bufr.readLine())!=null){   if("over".equals(line)){    break;   }   bufw.write(line);   bufw.newLine();   bufw.flush();  } }}  

  

转换流总结:
    InputStreamReader : 字节到字符的桥梁,解码
    OutputStreamWriter : 字符到字节的桥梁,编码
流的操作规律:
    首先需弄清楚操作规律的原因是:流的对象太多啦,往往不知道用哪一个对象合适。
    想要知道对象开发时用到哪些对象,只要通过四个条件去明确即可。
 
1, 明确源和目的(汇)
    源:InputStream 和 Reader
    目的:OutputStream 和 Writer
2,明确数据是否是纯文本数据。
    源:
            是纯文本:Reader
            不是纯文本:InputStream
    目的:
            是纯文本:Writer
            不是纯文本:OutputStream
此时就明确了需要使用哪个体系
 
3,明确具体的设备
    源设备:
            硬盘:文件File
            键盘:System.in
            内存:数组
            网络:Socket流
    目的设备:
            硬盘:文件File
            控制台:System.out
            内存:数组
            网络:Socket流
 
4,是否需要其他额外功能。
    1)是否需要高效(缓冲区)
            是就加上Buffer
    2)转换
    ......
 
 
 
使用转换流的常见场景:
    1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换流作为桥梁,提高对本文操作的便捷
    2,操作文本涉及到具体的指定编码表时,必须使用转换流。
 
 
 

Java之IO转换流