java - 带有 FileReader 的 BufferedReader
问题描述
我对 BufferedReader 如何与 FileReader 一起工作有疑问。也研究了有关 stackoverflow 和 Google 的大部分帖子,但我的疑问仍未消除。这是我第三天穿上这个来理解..!:)
这里是:
我的理解说,当我们使用下面的代码片段时
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
FileReader 读取字节数据并放入缓冲区。这里缓冲区由 BufferedReader 创建,而 BufferedReader 的实例从该缓冲区读取。
这让我想到,因为这篇文章说了解 BufferedReader 在 Java中的工作原理, BufferedReader 本身不存储任何东西,因为如果是这种情况,那么我认为 BufferedReader 做了两件事,一是创建一个缓冲区,二是创建一个从中读取的 BufferedReader 实例缓冲...!说得通...?
我的第二个疑问是,BufferedReader 可用于避免 IO 操作,这意味着避免从磁盘读取字节然后转换为 Char 然后发出的耗时工作。因此,为了克服这个问题,可以使用 BufferedReader 来一次读取大量数据。这让我想到,当 BufferedReader 包裹在 FileReader 周围时,FileReader 流首先读取,然后将数据传递给 BufferedReader。那么它如何需要一大块......?
我的理解是,BufferedReader 阅读器很有帮助,因为它从作为内存的 Buffer 中读取数据,所以与其在从磁盘读取字节并同时进行转换的时候做同样的事情,不如先将所有字节放入缓冲区或内存中,然后再读取它从那里开始,因为它的读取速度很快,也可以转换为字符。这是我通过在线阅读得出的结论,但我不同意100%,因为即使放入缓冲区也没有跳过任何步骤,那么它如何减少时间范围......?:(
我真的对这些感到困惑,谁能帮助我更准确地理解这一点?
解决方案
FileReader
读取字节数据
不,它构造一个FileInputStream
and Input Reader
,并从后者读取,作为字符。
并放入缓冲区
放入调用者的缓冲区。
这里的缓冲区是由
BufferedReader
BufferedReader 的实例创建的,并且从该缓冲区中读取。
正确的。
这让我想到,因为这篇文章说了解 BufferedReader 如何在 Java中工作, BufferedReader 本身不存储任何东西
那篇文章中的声明是完整的,完全是胡说八道,任何其他这样说的消息来源也是如此。当然,它存储数据。它是一个缓冲区。请参阅 Javadoc,特别是以下语句:“从字符输入流中读取文本,缓冲字符[我的重点],以便高效读取字符、数组和行。”
因为如果是这样的话,那么我想做
BufferedReader
两件事,一是创建一个缓冲区,二是创建一个BufferedReader
从该缓冲区读取的实例......!说得通...?
不,但您的消息来源也没有。你上面的第一个直觉是正确的。
我的第二个疑问是,
BufferedReader
可以用来避免 IO 操作,这意味着避免从磁盘读取字节然后转换为 Char 然后发出的耗时工作。因此,为了克服这个问题,可以使用 BufferedReader 来一次读取大量数据。这让我想到,当 BufferedReader 包裹在 FileReader 周围时,FileReader 流首先读取,然后将数据传递给 BufferedReader。那么它如何需要一大块......?
通过向FileReader.read()
.
我的理解是,BufferedReader 阅读器很有帮助,因为它从作为内存的 Buffer 中读取数据,所以与其在从磁盘读取字节并同时进行转换的时候做同样的事情,不如先将所有字节放入缓冲区或内存中,然后再读取它从那里开始,因为它的读取速度很快,也可以转换为字符。这是我通过在线阅读得出的结论,但我不同意100%,因为即使放入缓冲区也没有跳过任何步骤,那么它如何减少时间范围......?:(
跳过从磁盘逐字符读取的步骤。从磁盘文件中读取一个块或多或少与读取一个字节一样有效,而且系统调用本身也很昂贵。
推荐阅读
- ups - UPS 货件 JSON 文档
- c# - 将 XML 反序列化为 for 循环中的 C# 对象列表太慢
- mysql - 计算来自两个不同表的记录数并将它们分组
- javascript - 如何在按钮 onclick 上将动态创建的元素 id 传递给 javascript 函数。
- apache-kafka - ibm-eventstreams 是否支持 Kafka ACL?
- nativescript - 如何在 NativeScript 中调用可变参数函数?
- html - 仅 CSS 导航 - 单选框显示/隐藏页面
- html - 如何为部分添加背景颜色
- permissions - GitLab 成员的默认开发人员权限
- node.js - 按数组mongodb查询的长度排序