【问题标题】:InputStreamReader vs FileReaderInputStreamReader 与 FileReader
【发布时间】:2011-12-20 23:07:15
【问题描述】:

除了两者的初始化方式之外,我似乎无法确定InputStreamReaderFileReader 之间的任何区别。使用其中一种有什么好处吗?大多数其他文章涵盖FileInputStreamInputStreamReader,但我与FileReader 形成对比。在我看来,他们都有相同的目的。

【问题讨论】:

  • 看看这个问题,它有我最喜欢的 3 个 SO 用户的答案(仅来自)! (Jon Skeet 不止是最喜欢的)

标签: java stream


【解决方案1】:

首先,InputStreamReader 可以处理所有输入流,而不仅仅是文件。其他示例包括网络连接、类路径资源和 ZIP 文件。

其次,FileReader 在 Java 11 之前不允许您指定编码,而是只使用平台默认编码,这使得它几乎没有用,因为当代码在具有以下功能的系统上运行时,使用它会导致数据损坏不同的平台默认编码。

从 Java 11 开始,FileReader 是一个有用的快捷方式,用于将 InputStreamReader 包裹在 FileInputStream 周围。

【讨论】:

  • 这是我第一眼看到的结果(从跨平台的角度来看),但我想知道他们为什么还要实现FileReader
  • @Spliff:从这个角度来看,API 中隐式使用默认编码的所有内容都是一个坏主意;我想在设计 API 的时候,这似乎不是一个问题。我真的不明白为什么他们还没有添加一个接受编码的 FileReader 构造函数。
  • 从文件中读取7500000行字符串,br = new BufferedReader(new InputStreamReader(fileInputStream)); // 需要 20 分钟 br = new BufferedReader(new FileReader(file)); // 需要 3 分钟,所以在我的情况下 FileReader 比 InputStream Reader 快得多
  • @DwivediJi:无论是什么导致了性能差异,它都与 FileReader 或 InputStreamReader 无关,因为 FileReader 只是 InputStreamReader 的一个子类,它添加了一些将参数包装在 FileInputStream 中的构造函数。
  • 在 Java 11 中,新的构造函数已添加到 FileReader,它允许您指定字符集 public FileReader(File file, Charset charset) throws IOException
【解决方案2】:

FileReader 从文件系统中的文件中读取字符。 InputStreamReader 从任何类型的输入流中读取字符。流可以是 FileInputStream,但也可以是从套接字、HTTP 连接、数据库 blob 等获取的流。

我通常更喜欢使用包装 FileInputStream 的 InputStreamReader 来读取文件,因为它允许指定特定的字符编码。

【讨论】:

    【解决方案3】:

    FileReader 扩展 InputStreamReader。唯一的区别是 FileReader 的构造函数假定您正在从 String filenameFile fileFileDescriptor fd 等文件中读取数据。

    我建议您查看 FileReader 的来源以了解更多信息。

    【讨论】:

    • 所以 FileReader 是专门为流文件制作的(没有其他类型的流是可能的),而 InputStreamReader 做同样的事情但也接受其他类型的流?
    • @Spliff:API 文档说明:“用于读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要指定这些重视自己,在 FileInputStream 上构造一个 InputStreamReader。"
    • “桥梁”术语让我对 API 文档感到厌烦,好像一个与另一个紧密相连,以至于它们都需要一起使用;好像我不能单独使用InputStreamReader
    猜你喜欢
    • 2015-08-12
    • 2012-04-13
    • 2011-03-12
    • 2012-04-21
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多