【问题标题】:What is more efficient to read from a text file, File or FileReader? [closed]从文本文件、File 或 FileReader 读取什么更有效? [关闭]
【发布时间】:2014-04-15 10:46:06
【问题描述】:

我对 Java 中的 file 和 FileReader 类之间的区别有点困惑,它们都以同样的方式为我工作,因为它们可以获取文本文件并将其输入到数组中,但实际上哪个更有效在这种情况下使用哪个是最好的。

我知道有人问过这样的问题,但他们倾向于关注特定代码或这两个类所具有的方法。

谢谢。

【问题讨论】:

  • 你所说的“文件”是什么意思,是指FileInputStream吗?
  • 你能粘贴代码吗

标签: java performance input inputstream


【解决方案1】:

java.io.File 代表文件本身 - 它的存在,无论是文件还是目录,最后修改日期等。您无法使用 File 类中的任何方法读取文件的内容。

但是,您可以使用File 作为另一个类(如java.io.FileReader)的输入,这样您就可以读取文件的内容。

最终,阅读文本文件的速度取决于您想用它们做什么。分析您的代码以查看哪种方法花费的时间最长。您可以将java.io.FileReaderjava.util.Scanner 甚至java.nio.channels.FileChanneljava.nio.charset.CharsetDecoder 结合使用。

正如您所说,您正在阅读文本文件,您应该坚持使用用于读取字符流的类,而不是那些读取原始字节的类。这使您能够正确读取的不仅仅是 ASCII 字符。

【讨论】:

    【解决方案2】:

    就内存效率而言,FileInputStream 效率更高,因为它读取单个字节。 FileReader 读取字符,每个字符是四个字节。

    来源:http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly#FileReaderandBufferedReader

    【讨论】:

    • 您是否真的认为FileInputStreamFileReader 更“高效”,因为FileReader 一次返回一个字符(4 字节)而不是1 个字节?还是我误会了?
    • FileReader 将字节转换为字符,因此它使用更多内存。
    • 它可能会较慢,因为它必须从字节中解释字符。并且它可能会使用 tiny 更多的内存(但无论如何都会被您可能 - 可能应该 - 将其包装进去的任何缓冲区淹没)。我想如果做一些你对文件内容不感兴趣的事情(例如复制它),它可能会变慢。但是,如果您确实需要“阅读”内容,则无济于事。
    【解决方案3】:

    使用File 类来表示文件(即现有文件的路径,或者您可能要创建的文件)。

    如果您想读取字节,请使用FileInputStream(可能将其包装在BufferedInputStream 中)。

    如果您想读取字符(即文本文件或类似文件),请使用 FileReader(可能将其包装在 BufferedReader 中)。您可能想要指定编码(如果您知道的话),或者可能更喜欢依赖系统 (OS) 默认编码 - 这取决于您的用例。

    此外,编写通用实用程序方法更喜欢只接受InputStreamReader。例如,public static void copy(Reader r, Writer w) throws IOExceptionpublic static void copy(FileReader r, FileWriter w) throws IOException 更有用(可重复使用)。一般来说,只有在不能使用更通用的抽象(如Reader)时才使用特定类型。

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2012-09-04
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多