Jakartase_IO流_ —转换流(三)

1、前言:InputStreamReader 、OutputStreamWriter:

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

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

2、应用场景:

  • 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();
        }
    }
}

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

  • 一、建立源
  • 二、选择流
  • 三、系列操做
  • 四、关闭流函数

    • 附:先打开的后关闭!Java7的带资源的try (try...with--resource) 已经帮咱们省了不少功夫 若是想规范一下本身的代码,推荐手写!)
相关文章
相关标签/搜索