Chap10:IO流---转换流

1、前言:InputStreamReader 、OutputStreamWriter:java

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

-附:读入时产生乱码的缘由:函数

  • 一、当前工程字符集与 源头文件内容的 字符集不符合!
  • 二、在读取时,假如用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流的操做都离不开"四大步骤"code

  • 一、建立源
  • 二、选择流
  • 三、系列操做
  • 四、关闭流(附:先打开的后关闭!可是Java8的代资源的try(try...with--resource) 已经帮 咱们省了不少功夫 若是想规范一下本身的代码,推荐手写!)
相关文章
相关标签/搜索