java—从文本文件、文件或文件读取器中读取什么更有效?

cgh8pdjw  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(278)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

6年前关门了。
改进这个问题
我对java中file和filereader类之间的区别有点困惑,它们对我的工作方式都是一样的,它们可以获取文本文件并将其输入数组,但在这种情况下,哪一个更有效,哪一个最好。
我知道有人问过这样的问题,但他们倾向于关注特定的代码或两个类拥有的方法。
谢谢您。

syqv5f0l

syqv5f0l1#

使用 File 类来表示文件(即指向现有文件或您可能要创建的文件的路径)。
使用 FileInputStream (可能是用塑料袋包起来的 BufferedInputStream )如果你想读字节。
使用 FileReader (可能是用塑料袋包起来的 BufferedReader )如果要读取字符(即文本文件或类似文件)。您可能希望指定编码(如果您知道的话),或者更愿意依赖于系统(os)默认编码-这取决于您的用例。
另外,编写通用实用程序方法时更倾向于只接受 InputStream 或者 Reader . 例如, public static void copy(Reader r, Writer w) throws IOException 更有用(可重用)比 public static void copy(FileReader r, FileWriter w) throws IOException . 一般来说,只有在不能使用更一般的抽象(如 Reader ).

kxxlusnw

kxxlusnw2#

就内存效率而言,fileinputstream更高效,因为它读取单个字节。filereader读取字符,每个字符有四个字节。
资料来源:http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly#filereaderandbufferedreader

hgb9j2n6

hgb9j2n63#

java.io.File 表示文件本身-它的存在,不管它是文件还是目录,它的最后修改日期,等等。您不能用中的任何方法读取文件的内容 File 班级。
但是,您可以使用 File 作为另一个类的输入,比如 java.io.FileReader ,这样就可以读取文件的内容。
最终,阅读文本文件的速度取决于你想用它们做什么。分析代码以查看哪个方法花费的时间最长。你可以用 java.io.FileReader , java.util.Scanner 甚至 java.nio.channels.FileChannel 结合 java.nio.charset.CharsetDecoder .
正如您所说的您正在读取文本文件,您应该坚持使用用于读取字符流的类,而不是读取原始字节的类。这允许您正确地读取不仅仅是ascii字符。

相关问题