博客
关于我
java基础:12.5 缓存流 BufferReader、 PrintWriter、flush
阅读量:792 次
发布时间:2023-01-29

本文共 2431 字,大约阅读时间需要 8 分钟。

基于输入流和输出流的优化与缓存机制分析

在经历了字节流和字符流的基础学习后,现将重点内容归纳如下:

  • 缓存流(Buffered IO)问题与解决方案
  • 字节流和字符流在传统的IO操作中,每次读写都直接与硬盘进行交互,这种频繁的磁盘访问导致系统性能体感下降。在高频率的读写场景下,系统表现往往显得低效。

    缓存流通过解决这一问题,提升了数据读写效率。具体而言:

    • 读取方式:在读取数据时,一次性将较多的数据缓存到内存中。后续每次读取都优先从缓存中获取,直到缓存内容全部处理完毕,再进行下一批读取操作。这样减少了对硬盘的频繁访问。

    • 写入方式:在写入操作时,先将数据写入缓存区。缓存区达到一定阈值后,才会将所有内容一并写入硬盘。这种机制避免了传统每次写入都要调度IO操作,从而减少了磁盘操作次数。

    1. BufferedReader与PrintWriter的应用实例
    2. 基于上述原理,以下是两个关键工具的使用示例:

      • BufferedReader:用于高效读取文本文件。可以极大减少磁盘IO次数,提升读取效率。
      import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class FileReadTest {    public static void main(String[] args) {        File input = new File("f:/testfile/test.txt");        try (            BufferedReader reader = new BufferedReader(new FileReader(input));        ) {            while (true) {                String line = reader.readLine();                if (line == null) {                    break;                }                System.out.println(line);            }        } catch (IOException e) {            e.printStackTrace();        }    }}
      • PrintWriter:优化了向文件写入数据的性能。信息可以通过合批写入的方式提高效率。
      import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class FileWriteTest {    public static void main(String[] args) {        File output = new File("f:/testfile/file.txt");        try (            FileWriter fileWriter = new FileWriter(output);            PrintWriter printWriter = new PrintWriter(fileWriter);        ) {            printWriter.println("今天");            printWriter.println("是一个");            printWriter.println("好日子");        } catch (IOException e) {            e.printStackTrace();        }    }}
      1. flush命令的作用解析
      2. 在需要立即将缓存区内容同步到硬盘中的场合,应使用flush命令。

        import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class FileWriteTestFlush {    public static void main(String[] args) {        File output = new File("f:/testfile/file.txt");        try (            FileWriter fileWriter = new FileWriter(output);            PrintWriter printWriter = new PrintWriter(fileWriter);        ) {            printWriter.println("今天");            printWriter.flush(); // 强制将缓存区数据写入硬盘            printWriter.println("是一个");            printWriter.flush();            printWriter.println("好日子");        } catch (IOException e) {            e.printStackTrace();        }    }}

        总结

        通过合理运用缓存流机制及现代化I/O工具,可以有效提升读写效率。BufferedReader和PrintWriter作为优化工具提供了更高效的操作方式,而flush命令则为需要即时同步的情况提供了灵活控制手段。

    转载地址:http://karyk.baihongyu.com/

    你可能感兴趣的文章
    Kubernetes实战(三十二)-Kubeadm 安装 Kubernetes v1.24.0
    查看>>
    Kubernetes实战(三十)-HTTP 7层路由机制(Ingress)
    查看>>
    Kubernetes实战(三)-定向调度(NodeSelector)
    查看>>
    Kubernetes实战(二十九)-集群资源管理(CPU & Memory)
    查看>>
    Kubernetes实战(二十二)-Etcd 集群部署(安全)
    查看>>
    Kubernetes实战(二十五)-Flannel 网络部署(不推荐,不支持 Etcd3)
    查看>>
    Kubernetes实战(二十八)-环境共享与隔离(Namespace)
    查看>>
    Kubernetes实战(二十四)-kubernetes二进制文件方式部署集群(安全)(下)
    查看>>
    Kubernetes实战(十五)-敏感数据管理(Secret)
    查看>>
    Kubernetes实战(十八)-共享卷子路径划分(Subpath)
    查看>>
    Kubernetes实战(十)-升级和回滚(Deployment)
    查看>>
    Kubernetes对接Ceph存储实现云原生持久化
    查看>>
    Kubernetes对象Service详解
    查看>>
    kubernetes常用工具
    查看>>
    Kubernetes快速上手:部署、使用及核心概念解析
    查看>>
    Kubernetes故障排查与面试汇总
    查看>>
    Kubernetes故障排查实战
    查看>>
    kubernetes混合云平台运维实战项目分享
    查看>>
    Kubernetes灰度发布实战:滚动更新的奥秘与策略,带你领略无缝升级的艺术
    查看>>
    kubernetes的概念介绍_服务发现负载均衡_存储编排_自动部署和回滚_自动完成装箱计算_自我修复_集群的方式_架构原理---分布式云原生部署架构搭建013
    查看>>