一、前言:InputStreamReader 、OutputStreamWriter:

  • 用来实现将字节流转化成字符流
  • 字符集的参数设定:可以处理 不同的字符集(UTF-8、GBK(保存方式-->ANSI编码) ...), by th way, 不设定字符集, 默认以当前工程的字符集相同!
  • 附:读入时产生乱码的原因:

    • 1、当前工程字符集与 源头文件内容的 字符集不符合!
    • 2、在读取时,假如用read()一个一个字符(char)的读取,char占2个字节(Java采用Unicode)
    • 3、注:1.编码与中文
      Unicode/GBK下: 2字节 ,
      UTF-8: 3字节
    • 4、在UTF-8下,读取中文字符,意味着读一个中文,只能读它的2/3 !

二、应用场景:

  • System.in 是字节流对象,代表键盘的输入。
  • 如果我们想要获取用户的输入时, 就必须用到缓冲字符流BufferedReader特有的方法readline(), 但是发现 BufferedReader的构造函数的参数是一个 Reader对象,此时转换流就派上用场了!
    import java.io.*;
    public class IO_putStream_RW {
    public static void main(String[] args) {
        /*(1)、创建源:源头就是用户输入的字符吧!*/
        /*(2)、选择流:*/
        try (BufferedWriter bw = 
                 new BufferedWriter(new OutputStreamWriter(System.out));
             BufferedReader br = 
                 new BufferedReader(new InputStreamReader(System.in, "UTF-8"))) {
            // 使用字符输入和输出流
            String str = br.readLine();

            while ("exit".equals(str)){ //字符串内置的equals()比较的是字符串的"内容"
                //写到控制台
                bw.write(str);
                //换行
                bw.newLine();
                //刷新
                bw.flush();    //有关flush()的作用:`http://sfau.lt/b5bu777
                //继续读
                str = br.readLine();
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

三、总结:IO流的操作都离不开"四大步骤"

  • 1、创建源
  • 2、选择流
  • 3、系列操作
  • 4、关闭流

    • 附:先打开的后关闭!Java7的带资源的try (try...with--resource) 已经帮我们省了很多功夫 如果想规范一下自己的代码,推荐手写!)

wdt0x01
29 声望2 粉丝