关于BufferedReader和BufferedWrite缓冲字符输入输出流

关于BufferedReader和BufferedWrite:

1、构造方法如下:

  • public BufferedReader(Read in);
  • public BufferedWriter(Read in);

2、我们知道BufferedReader属于字符输入流,构造方法中也要求传一个Reader流,也是属于字符流。

如果我们要传一个字节流,该怎么办?

那就要用到转换流:InputStreamReader 和 OutputStreamWriter。


3、关于BufferedReader,缓冲字符输入流:

带有缓存区的字符输入流。

使用这个流的时候不需要自定义char[]数组,自带缓冲。


4、构造方法详解:

  • BufferedReader(Reader in);
    没有指定缓冲数组的长度,使用默认值8192,也就是16KB大小
  • BufferedReader(Reader in, int size);
    使用指定大小size的字符数组

(1)参数需要传一个Reader类型,查看Reader后,发现它是一个抽象类,其中子类有FileReader。

说明我们可以用多态传一个FileReader对象。

(2)这里有个新概念:节点流 和 包装流。

我们把一个流作为参数传入另一个流时,传入的流称为:节点流。

外面的流,包装着里面的节点流,外面的流称为:包装流,也称为:处理流。

(3)当使用BufferedReader(Reader in);
实例化BufferedReader时,只传了一个Read对象,或者说传一个FileReader对象,没有指定缓冲区数组char []的长度大小,底层使用默认值。

默认值为8192个字符,512个字符是1KB,8192个字符就是16KB。

你也可以使用另一个构造方法,传一个Read对象外,再指定缓冲区char[]数组的长度。

(4)通过以上说明,我们发现,其实BufferedReader是对FileReader的进一步包装,不需要我们再写char[ ]数组了。

已经学习过FileReader和FileWrite的情况下,学习BufferedReader和BufferedWrite用法是差不多的。

测试构造方法代码:

import java.io.*;

public class Test02 {
     
    public static void main(String[] args) throws IOException {
       // 这里偷个懒,使用异常上抛方式,实际上main中不要这样做

        // 文件字节输入流,属于字节流
        //FileInputStream fis = new FileInputStream("IOtest/test04.txt");

        // 将字节流 转换成 字符流
        // 在这里,fis属于节点流,isr属于包装流/处理流
        //InputStreamReader isr = new InputStreamReader(fis);

        // 缓冲字符输入流,属于字符流
        // 在这里,isr属于节点流,br属于包装流/处理流
        //BufferedReader br = new BufferedReader(isr);

        // 所以说,节点流 和 包装流是相对概念,在不同的位置叫法可能不一样

        // 以上3行代码可以合并
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("IOtest/test04.txt")));

        // 最后只需关闭最外层的包装流,节点流也会随着关闭
        br.close();


        // 同样BufferedWriter也可以这样使用
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("IOtest/test04.txt")));

        // 关闭外层包装流
        bw.close();
    }
}

你可能感兴趣的:(Java,EE,java,BufferedReader,BufferedWriter)