• IO流 之 缓冲流(字节缓冲流和字符缓冲流)


    在这里插入图片描述
    缓冲流对原始流进行了包装,以提高原始流读写数据的性能。

    字节缓冲流(BufferedInputStream和BufferedOutputStream)

    在这里插入图片描述
    字节缓冲流在内存中提供了一个默认为8kb的区域,用于缓冲,当流开始时,先读取一个8kb的内容缓存到内存,然后再对其进行操作,速度会变快,因为字节缓冲流利用缓冲区将数据暂时存储起来,减少了频繁地进行读写操作的次数,从而提高了读写的效率。相较于直接读写字节流,使用字节缓冲流可以减少系统调用次数,提升性能。就是直接操作硬盘的次数变少了。

    在这里插入图片描述

    而缓存的大小也是可以自定义的 但默认时8kb

    下面时一个拷贝图片的代码示范:

    package day0927;
    import java.io.*;
    public class demo9 {
        public static void main(String[] args) {
            try (
                    FileInputStream  in = new FileInputStream("D:\\asdf.jpg");
                    //将低级流放入高级流
                    InputStream bin = new BufferedInputStream(in);
                    FileOutputStream out = new FileOutputStream("E:\\asdf.jpg");
                    OutputStream bout = new BufferedOutputStream(out)
            ){
                byte[] buffer = new byte[1024];
                int b;
                while ((b = bin.read(buffer))!= -1){
                    bout.write(buffer,0,b);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    字符缓冲流(BufferedInputStream和BufferedOutputStream)

    在这里插入图片描述
    字符缓冲流提供了一个8kb的默认缓冲区域,先将字符读取8kb到内存,再在内存中进行操作,然后再对其进行操作,速度会变快,因为字符缓冲流利用缓冲区将数据暂时存储起来,减少了频繁地进行读写操作的次数,从而提高了读写的效率。相较于直接读写字节流,使用字符缓冲流可以减少系统调用次数,提升性能。就是直接操作硬盘的次数变少了。
    在这里插入图片描述
    在这里插入图片描述
    下面提供字符缓冲流复制txt文件的代码示范:

    package day0927;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    public class demo10 {
        public static void main(String[] args) {
            try (
                    FileReader fileReader = new FileReader("src\\a.txt");
                    BufferedReader br = new BufferedReader(fileReader);
                    FileWriter fileWriter = new FileWriter("src\\d.txt");
                    BufferedWriter bw = new BufferedWriter(fileWriter);
            ){
                String b;
                //readLine()一行一行读取文本,如没有内容后将返回null
                while ((b = br.readLine()) != null){
                    System.out.println(b);
                    bw.write(b);
                    //newLine()换行方法
                    bw.newLine();
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    k8s集群新增计算节点使用华为iscsi存储创建的pvc存储挂载报错:FailedMount
    【Java-----IO流(四)之转换流详解】
    Linux的七种运行级别
    ArcGIS中ArcMap栅格遥感影像的监督分类
    JavaScript函数中this的指向问题讨论(普通函数和箭头函数)
    快速搭建云原生开发环境(k8s+pv+prometheus+grafana)
    云服务器中mongodb配置账号密码 图文讲解(全)
    C#程序随系统启动例子 - 开源研究系列文章
    超声波、毫米波、ToF激光雷达——在低功耗场景的应用选型
    win10电脑不小心卸载的软件怎么恢复
  • 原文地址:https://blog.csdn.net/weixin_72979483/article/details/133413466