RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1497291
Accepted
stepanevgen2013
stepanevgen2013
Asked:2023-02-17 22:52:22 +0000 UTC2023-02-17 22:52:22 +0000 UTC 2023-02-17 22:52:22 +0000 UTC

BufferedReader 性能改进

  • 772

在研究 Reader 类时,我遇到了以下定义:“BufferedReader 从字符输入流中读取文本,缓冲读取的字符。缓冲区的使用旨在提高从流中读取数据的性能。”

问题:与使用常规读取器相比,使用缓冲区如何提高性能?

java
  • 2 2 个回答
  • 38 Views

2 个回答

  • Voted
  1. Best Answer
    Byb
    2023-02-17T23:52:46Z2023-02-17T23:52:46Z

    “常规”(即不包裹BufferedReader)阅读器每次阅读字符都要参考来源(例如,文件),这是一项相对耗时的工作。例如,你有一个包含很多字符的文件,你想使用通常的FileReader. read()在这种情况下,您对读取一个字符的方法的每次调用都会生成一次文件访问,并且您将访问它的次数与其中的字符数一样多。

    但BufferedReader它的工作方式是访问源,一次从那里读取很多字符(默认为 8192),将它们输入到某个数组中,然后在下一个方法调用期间或字符将从该数组中read()读取readLine(),这当然要快得多。

    所以如果你想逐个字符地读取文本文件,但是使用BufferedReader,那么第一次调用该方法时,read()8192 个字符将立即被缓冲,下次调用该方法时,字符将简单地从缓冲区中取出.

    让我们测量阅读包含大约十万个字符的文本文档的时间,不使用它BufferedReader和使用它。

    不使用BufferedReader:

    long start = System.currentTimeMillis();
    try(FileReader fileReader = new FileReader("sometxt.txt")) {
        int i;
        do {
            i = fileReader.read();
        } while (i != -1);
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("Time: " + (System.currentTimeMillis() - start));
    

    结果:

    Time: 428
    

    现在使用BufferedReader:

    long start = System.currentTimeMillis();
    try(BufferedReader bufferedReader = new BufferedReader(new FileReader("sometxt.txt"))) {
        int i;
        do {
            i = bufferedReader.read();
        } while (i != -1);
    } catch (IOException e) {
         e.printStackTrace();
    }
    System.out.println("Time: " + (System.currentTimeMillis() - start));
    

    结果:

    Time: 100
    
    • 4
  2. Nowhere Man
    2023-02-17T23:44:08Z2023-02-17T23:44:08Z

    如文档中所写:

    通常,对 a 发出的每个读取请求Reader都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 a 包装BufferedReader在任何操作成本可能很高的地方Reader,read()例如 FileReaders 和 InputStreamReaders。...

    如果没有缓冲,每次调用read()or 都readLine()可能导致从文件中读取字节,转换为字符,然后返回,这是非常低效的。

    也就是说,需要缓冲来避免从磁盘或网络读取字节/字符——在读取过程中,数据被加载到内存中的缓冲区中,并从那里读取,从而减少磁盘/网络访问次数。因此,这个类推荐用于包装FileReader/ instances InputStreamReader。

    • 1

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5