Java重点 | IO流中的缓冲流专属和转换流专属

80 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

缓冲流专属和转换流

BufferedReader读,和InputStreamReader转换流联合使用

BufferedReader: 带有缓冲区的字符输入流。 使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲。

BufferedReader的括号里面要求传的是Reader(字符输入流),如果要传字节输入流,就要使用转换流(InputStreamReader),使字节输入流转成字符输入流。

public class BufferedReader读_加转换流 {
    public static void main(String[] args) {
        BufferedReader br= null;
        FileReader fr = null;
        FileInputStream fis = null;
        InputStreamReader isr = null;
        try {
            /* 这里面演示的是BufferedReader传入一个Reader
            这个构造方法里面只能传入Reader类型的,如果要传入字节输入流,就要用转换流转换
            fr = new FileReader("D:\\AJava\\新建文件夹\\aaa");
            br = new BufferedReader(fr);*/

            //这个构造方法里面只能传入字符输入流类型。传入字节输入流要使用转换流,把字节输入流转换成字符入出流
            //演示传入字节输入流 用转换流
            //创建字节输入流对象
            fis = new FileInputStream("aa");
            //创建转换流对象(字节输入转换成字符输入)
            isr= new InputStreamReader(fis);
            //创建BufferdReader对象
            br = new BufferedReader(isr);
            /*上面的合并在一起写 也就不用上面的赋值null了
            //当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流。外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流。
            br = new BufferedReader(new InputStreamReader(new FileInputStream("aa")));*/

            //readLine()读取一行内容,当读到末尾没有内容的时候,返回null
            String aa =null;
            while ((aa = br.readLine())!=null){
                System.out.println(aa);
            }
            /*String s = br.readLine();
            System.out.println(s);读一行内容*/

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fr != null) {
                try {
                    br.close(); //对于包装流来说,只需要关闭最外层的流就行,里面的节点会自动关闭。
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
    

BufferedWriter写,和OutputStreamWriter转换流联合使用

BufferedWriter :带有缓冲的字符输出流。 OutputStreamWriter:转换流。

BufferedWriter 括号里面要求传的是writer(字符输出流),如果要传字节输出流,就要使用转换流(OutputStreaWriter),使字节输出流转换成字符输出流。

public class BufferedWriter写_加转换流 {
    public static void main(String[] args) {
        BufferedWriter bw  =null;
        try {
            /*传入字符writer类型的输出流
            bw = new BufferedWriter(new FileWriter("aa",true));*/

            //里面只能传入字符输出流类型。传入字节输出流要使用转换流,把字节输出流转换成字符输出流
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("JAVAse进阶/src/IO流/aa",true)));

            bw.write("我是一个大帅哥");
            bw.write("\n");
            bw.write("你好大帅哥");
            //刷新
            bw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close(); //关闭最外层
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}