• 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 == '
    ')
        continue;
       if(ch == '
    '){
        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,操作文本涉及到具体的指定编码表时,必须使用转换流。
     
     
     
  • 相关阅读:
    FHS Filesystem Hierarchy Standard(文件系统层次化标准)
    Linux文件类型
    cd、rm、ls命令
    基础内容
    Linux命令格式及使用方法
    Linux一些概念
    SHELL脚本的成分
    SHELL脚本
    Loadrunner关联
    赋值语句
  • 原文地址:https://www.cnblogs.com/lingfengblogs/p/4190770.html
Copyright © 2020-2023  润新知