• java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别


     
    标签: outputstreamwriterreader字符file方法
     分类:
     

    回顾字节流输入输出 
    这里写图片描述 
    Reader和Writer 
    Reader和Writer这两个抽象类主要用来读写字符流。 
    这里写图片描述 
    InputStreamReader是字节流通向字符流的桥梁 
    BufferedReader提供一个ReadLine()方法 
    这里写图片描述 
    OutputStreamWriter是字符流到字节流的桥梁 
    BufferedWriter也提供了一个很有用的方法,请看示例: 
    示例:

    public static void main(String[] args) throws Exception{
            //对文件的写入和对文件的读取
            FileOutputStream fos = new FileOutputStream("1.txt");
            //OutputStreamWriter这个函数的构造方法需要一个OutputStream对象
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            //通常我们构造BufferedWriter去进行写入操作,是一个更有效的写入操作。参数需要Writer类型。
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("this is test BufferedWriter");
            bw.close();
    
            FileInputStream fis = new FileInputStream("1.txt");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
            System.out.println(br.readLine());
            br.close();
        }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    示例:直接读取控制台的输入流

            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            String str = null;
            while((str=br.readLine())!=null){
                System.out.println(str);
            }
            br.close();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果: 
    xiaohong 
    xiaohong


    补充:字节流和字符流的区别 
    这里写图片描述 
    干货1:因为字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。


    干货2:流分类: 
    1.Java的字节流 
    InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。 
    2.Java的字符流 
    Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。 
    InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new


    干货3:在从字节流转化为字符流时,实际上就是byte[]转化为String时, 
    public String(byte bytes[], String charsetName) 
    有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang 
    而在字符流转化为字节流时,实际上是String转化为byte[]时, 
    byte[] String.getBytes(String charsetName) 
    也是一样的道理

  • 相关阅读:
    从小白到全栈的前端学习路径
    Vue初学者可能不知道的坑
    vue的基础使用
    15-浮动
    02-css的选择器
    深入理解JavaScript的闭包
    深入理解JavaScript的闭包,前戏— 作用域和词法作用域
    JavaScript简介
    02-HTML5新的input属性
    springboot+spring session+redis+nginx实现session共享和负载均衡
  • 原文地址:https://www.cnblogs.com/w-wfy/p/6411323.html
Copyright © 2020-2023  润新知