欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java IO之缓冲流概述-3

程序员文章站 2024-03-04 15:23:05
...

Java IO之缓冲流概述-3

缓冲流

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

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

字节缓冲输入流 【BufferedInputStream】

Java IO之缓冲流概述-3
!!!上代码!!!

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提供的功能是一样的高效读取文件内容
Java IO之缓冲流概述-3

字节缓冲输出流 【BufferedOutputStream】

Java IO之缓冲流概述-3
!!!上代码!!!

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提供的功能是一样的高效读取文件内容
Java IO之缓冲流概述-3

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秒
Java IO之缓冲流概述-3

字符缓冲输入流 【BufferedReader】

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

Java IO之缓冲流概述-3

!!!上代码!!!

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));
        }

    }

}

!!!结果!!!
Java IO之缓冲流概述-3

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

字符缓冲输出流 【BufferedWriter】

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

Java IO之缓冲流概述-3

!!!上代码!!!

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();
    }
}

!!!结果!!!
Java IO之缓冲流概述-3

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