从文本文件,文件或FileReader中读取什么更有效?

时间:2014-03-11 17:31:44

标签: java performance input inputstream

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

我知道这样的问题已被提出,但他们倾向于关注具体的代码或两个类的方法。

谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用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)时才使用特定的类型。

答案 2 :(得分:1)


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

但是,您可以使用File作为另一个类的输入,例如java.io.FileReader,然后允许您读取文件的内容。

最终,阅读文本文件的速度归结为您想要使用它们的速度。配置代码以查看哪种方法花费的时间最长。您可以将java.io.FileReaderjava.util.Scanner甚至java.nio.channels.FileChanneljava.nio.charset.CharsetDecoder结合使用。

正如您所说,您正在阅读文本文件,您应该坚持使用类来读取字符流,而不是读取原始字节的类。这使您可以正确读取ASCII字符。