Java IO之缓冲流概述-3

在这里插入图片描述

缓冲流

缓冲流也叫高级流,是对4个基本的FileXXX流的增强,所以也是4个流,按照数据类型分类:
能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流

  • 字节缓冲流:BufferedInputStream , BufferedOutputStream
  • 字符缓冲流:BufferedReader,BufferedWriter

字节缓冲输入流 【BufferedInputStream】

在这里插入图片描述
!!!上代码!!!

public class Demo01BufferedInputStreram {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\cccc.txt"));
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len));
        }
        bis.close();
    }

}

!!!结果!!! 跟FileInputStream提供的功能是一样的高效读取文件内容
在这里插入图片描述

字节缓冲输出流 【BufferedOutputStream】

在这里插入图片描述
!!!上代码!!!

public class Demo02BufferedOutputStream {

    public static void main(String[] args) throws IOException {

        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("F:\\dddd.txt", true));
        String content = "!!!!Hello World!!!" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bos.write(content.getBytes());
        }
        System.out.println("文件输出成功");
        bos.close();


    }
}

**!!!结果!!!**跟FileIOnputStream提供的功能是一样的高效读取文件内容
在这里插入图片描述

Demo CopyFile复制文件

!!!上代码,复制文件!!! 不要在意是什么文件。。。。

public class Demo03CopyFIle {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Media\\MO8EPSG_1.rmvb"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\MO8EPSG_1.rmvb"));

        long start = System.currentTimeMillis();
        byte[] bytes = new byte[10245];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        bis.close();
        bos.close();

        long end = System.currentTimeMillis();
        System.out.println("本次复制文件用了:" + (end - start) + "毫秒");
    }

}

**!!!结果!!!**复制1个G的文件,仅仅用了1秒
在这里插入图片描述

字符缓冲输入流 【BufferedReader】

从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。

在这里插入图片描述

!!!上代码!!!

public class BufferedReaderAndBufferedWriter {![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217205959345.png)

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new FileReader("F:\\cccc.txt"));
        char[] chars = new char[1024];
        int len = 0;
        while ((len = br.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len));
        }

    }

}

!!!结果!!!
在这里插入图片描述

注意:
将缓冲指定文件的输入。 没有缓冲,每次调用read()或readLine()可能会导致从文件中读取字节,转换成字符,然后返回,这可能非常低效
使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream进行本地化

字符缓冲输出流 【BufferedWriter】

将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。

在这里插入图片描述

!!!上代码!!!

public class Demo02BufferedWriter {

    public static void main(String[] args) throws IOException {

        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\ffff.txt", true));
        String content = "Hello World" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bw.write(content);
        }
        bw.close();
    }
}

!!!结果!!!
在这里插入图片描述

注意:
将缓冲PrintWriter的输出到文件。 没有缓冲,每次调用print()方法都会使字符转换为字节,然后立即写入文件,这可能非常低效

发布了24 篇原创文章 · 获赞 33 · 访问量 2391

猜你喜欢

转载自blog.csdn.net/weixin_41241629/article/details/104353246