博客
关于我
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/

    你可能感兴趣的文章
    leaflet叠加geojson图层(挖洞)(leaflet篇.43)
    查看>>
    leaflet叠加多个面(面的数据结构)(leaflet篇.62)
    查看>>
    leaflet图标跳动(leaflet篇.45)
    查看>>
    leaflet图标闪烁(leaflet篇.20)
    查看>>
    leaflet圆采集与圆编辑(leaflet篇.8)
    查看>>
    leaflet地图无级别缩放(移动端)(leaflet篇.76)
    查看>>
    leaflet多边形空间查询(ElasticSearch技术实现)(leaflet篇.52)
    查看>>
    leaflet实现wms服务面要素可点击(leaflet篇.30)
    查看>>
    leaflet实现反向匹配查询(ElasticSearch技术实现)(输入坐标查询距离最近的地址信息)(leaflet篇.49)
    查看>>
    leaflet实现四色预警(仿echarts气泡图)(leaflet篇.41)
    查看>>
    Leaflet快速入门与加载OSM显示地图
    查看>>
    leaflet态势标绘-细直线箭头采集(leaflet篇.83)
    查看>>
    leaflet接入geoserver发布的wms服务(leaflet篇.28)
    查看>>
    leaflet接入geoserver发布的热力图服务(leaflet篇.29)
    查看>>
    leaflet接入土地资源(leaflet篇.55)
    查看>>
    leaflet接入天地图(经纬度投影256)(leaflet篇.24)
    查看>>
    leaflet接入百度午夜蓝地图、深色地图(leaflet篇.27)
    查看>>
    leaflet接入百度地图服务时只有北半球的解决方案(leaflet篇.54)
    查看>>
    leaflet接入百度影像地图(leaflet篇.34)
    查看>>
    leaflet散点图(leaflet篇.13)
    查看>>