当前位置: 首页 > 知识库问答 >
问题:

有没有理由不用BufferedReader包装InputStreamReader?

仇迪
2023-03-14
InputStream inp = getClass().getResourceAsStream(filename);
InputStreamReader r = new InputStreamReader(inp);
BufferedReader reader = new BufferedReader(r);

关于已回答的问题:Java BufferedReader,将InputStream转换为BufferedReader,Java的BufferedReader和InputStreamReader类之间有什么区别?

BufferedReader[BR]和InputStreamReader[ISR]都实现了相同的接口。BR拥有ISR拥有的所有方法以及其他方法,包括非常有用的readLine()方法和不那么有用但仍然相关的skip()方法。您不一定需要BR来读取单个字符,尽管在这方面BR可以比ISR更有效地执行同样的操作。唯一显著的区别是FileReader是ISR的一个子类,而不是BR,尽管我在这个网站上有消息来源说FileReader已经不再真正使用了,因为有其他的选择。

我的研究表明ISR所能做的一切都被BR做得更好。我是一个年轻的开发人员,所以每个定义的或导入的类对我来说都是相关的。我试图把握的是,如果一些类不再使用,用新的版本或框架取代它们。我想知道更有经验的开发人员有什么要说的。那么,在使用ISR时是否有不使用BR的理由呢?

API的快速链接:
BufferedReader
InputStreamReader

共有1个答案

罗晨
2023-03-14

我在你的帖子中看到一些关于ISR和BR的混乱。

1)你是说

我的研究表明ISR所能做的一切都被BR做得更好

从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。

如您所见,ISR将字节转换为字符。另一方面BR需要字符。这就是为什么BR需要使用ISR来读取inputstream

2)关于最初的问题,为什么不只是使用ISR。您可以明确地这样做,但为了获得性能,您希望使用BR。您可能会问为什么不使用缓冲来实现ISR?因为ISR的设计是为了做一件好事,那就是读取字节并将其转换为字符。缓冲部分被移到Decorator类中,也就是BR。这样做是为了能够为任何读取器添加缓冲能力,而不仅仅是ISR。

 类似资料:
  • 我们有一个函数,该函数使用自身内部的非捕获lambda,例如: 现在,lambda实现的功能在其他地方变得需要,因此我将把lambda从提升到全局/命名空间范围。我可以将其保留为lambda,使其成为复制粘贴选项,或者将其更改为适当的函数: 将其更改为适当的函数是微不足道的,但这让我想知道是否有理由不将其保留为lambda?是否有任何理由不在任何地方使用lambda而不是“常规”全局函数?

  • 我读到这个关于Java的和之间的区别的问题,后者已经有几年的历史了。让我吃惊的是,只有一个问题提到了使用的任何缺点;也就是说,如果使用大量CPU,加速比就会降低。 假设您不在某种特殊的单线程环境中,是否应该始终选择?有什么理由不这样做吗?请注意,上面问题的一个答案提到,如果元素少于4096个,将直接调用。

  • 问题内容: 我指的是模块中的OrderedDict,这是一个有序的字典。 如果它具有可订购的附加功能,我意识到这通常不是必需的,但是即使如此,是否还有缺点?慢一点吗?是否缺少任何功能?我没有看到任何丢失的方法。 简而言之,为什么我 不 总是使用它而不是普通的词典? 问题答案: 是的子类,并且需要更多内存来跟踪键的添加顺序。这不是小事。该实现在幕后增加了第二个,所有键的双向链接列表(这是记住顺序的部

  • 我在Ubuntu 14上工作。我安装python3和pip3。当我尝试使用pip3时,我有这个错误 有人知道是什么问题吗? 非常感谢

  • 我正在运行到Windows路径字符限制。 例如,当我运行“gulp”的安装时,通过

  • 我正在运行一个ubuntu 12.04实例,加载了R3.0.2,但无法安装。packages()安装软件包。它下载文件,但似乎没有安装它们。我是不是遗漏了什么?在运行ubuntu R实例之前,我从未遇到过这样的问题。顺便说一句,我已经尝试从命令行使用sudoR实例化根进程,但仍然没有警告,也没有安装。顺便说一下,这个问题在我尝试安装的所有软件包中都是一致的。 下面是一个示例: 值得一提的是,我使用