Java缓冲流、转换流、节点流、处理流

一、BufferrReader(带有缓冲区的字符输入流)

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

1.构造方法

方法名 作用
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。

2.节点流与包装流

  • 当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
  • 外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流

3.代码示例:

import java.io.BufferedReader;
import java.io.FileReader;
public class BufferedReaderTest01 {
    public static void main(String[] args) throws Exception {
            FileReader reader = new FileReader("D://JAVATest/filewrite");
            //当一个外部的流的构造方法需要一个流的时候,这个被传进来的流叫做;节点流
            //外部负责包装的这个流,叫做:包装流或者叫做处理流
            //像当前这个程序来说:FileReader就是一个节点流,BufferedReader就是包装流/处理流
            BufferedReader br = new BufferedReader(reader);
            String s=null;
            while ((s= br.readLine())!=null){
                System.out.println(s);
            }
            //可以使用readLine方法一次读取一行
        /*
        	如果不写循环,因为定义的是
            String fistLine= br.readLine();
            System.out.println(fistLine);
            String SecondLine= br.readLine();
            System.out.println(SecondLine);
            String ThirdLine= br.readLine();
            System.out.println(ThirdLine);
         */

            //关闭包装流
            //对于包装流来说只需要关闭最外层的流,里面的节点流会自动关闭
            br.close();
        }

    }

输出:

我最爱学习了
学习了
没有对象不会new一个吗

二、转换流

  • 在上述字符流中只能传字符,要是想传入字节的话,需要先将字节流转换成字符流,这时就需要使用到转换流
  • InpStreamReader转换读取到的字节

1.构造方法:

InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的InputStreamReader。
InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。

2.代码示例

import java.io.*;
public class BufferedReaderTest02 {
    public static void main(String[] args) throws IOException {
        //字节流
        FileInputStream in = new FileInputStream("D:\\JAVATest\\bufferedReader");

        //通过转换流(InputStreamReader)转换为字符流
        //in是节点流,reader是包装流
        InputStreamReader reader = new InputStreamReader(in);
        //reader是节点流,br是包装流/处理流
        BufferedReader br = new BufferedReader(reader);
       /*
        上述也可以合并来写
        BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\JAVATest\\bufferedReader")))
        */
        String s=null;
        while ((s=br.readLine())!=null){
            System.out.println(s);
        }
        //关闭最外层
        br.close();

    }

}

输出:

lingstar
我最爱java了
这是带有缓冲区的字符输出流

三、BufferWriter(带有缓冲区的字符输出流)

1.构造方法

方法名 作用
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。

2.代码示例

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferWriterTest02 {
    public static void main(String[] args) throws IOException {
        //创建一个字符输出流,没有文件会自动创建
        //再次运行会清空重新写入,如果不想清空就在后面路径后加,true
        BufferedWriter out = new BufferedWriter(new FileWriter("D:/JAVATest/bufferedtest"));
        //写入
        out.write("我最爱java了");
        out.write("\n");
        out.write("lingstar");
        //刷新
        out.flush();
        //关闭最外层
        out.close();
    }
}

输出:

image-20220723151717300

posted @ 2022-07-23 15:19  星余明  阅读(76)  评论(0编辑  收藏  举报