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

时间:2017-06-08 16:20:55

标签: java io bufferedreader

我有以下代码从CSV中读取:

randn

回答问题: Java BufferedReaderConvert InputStream to BufferedReaderWhat is the difference between Java's BufferedReader and InputStreamReader classes?

BufferedReader [BR]和InputStreamReader [ISR]都实现相同的接口。 BR具有ISR与其他方法一起使用的所有方法,包括非常有用的readLine()方法和不太有用但仍然相关的skip()方法。虽然BR在这方面可以比ISR更有效地做同样的事情,但您不一定需要BR来阅读单个字符。唯一重要的区别是FileReader是ISR的子类,但不是BR,尽管我在这个网站上有消息来说,由于替代方案,FileReader已经不再使用了。

我的研究表明,BR所做的一切都可以做得更好。我是一个年轻的开发人员,因此每个定义或导入的课程对我来说都很重要我想要掌握的是,如果不再使用某些类,使用新版本或框架替换它们。我想知道更有经验的开发者必须说些什么。那么,在使用ISR时是否有理由不使用BR?

API的快速链接:
BufferedReader
InputStreamReader

1 个答案:

答案 0 :(得分:3)

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

1)你说的是

  

我的研究表明,BR所能完成的所有ISR都能做得更好。

但是让我们看看每个人的JavaDoc:

<强> ISR

  

public class InputStreamReader扩展Reader

     

InputStreamReader是从字节流到字符的桥接器   流:

<强> BR

  

从字符输入流中读取文本,缓冲字符   提供有效的字符,数组和行读取。

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

2)关于原始问题,为什么不使用ISR。你可以肯定这样做,但为了获得性能,你想使用BR。您可能会问为什么ISR没有使用缓冲实现?因为ISR旨在做一件好事,那就是读取字节并将其转换为字符。缓冲部分被移动到BR的Decorator类中。这样做是为了能够为任何Reader而不仅仅是ISR添加缓冲功能。