什么是逐行读取的最快方法?

3

我有一个包含字符串的大文件。所有行都应该添加到我的代码中的列表中。最快的方法是什么?我找到了这个,但我不知道如何使用它逐行读取。


1
可能是在Java中读取大文件的重复问题。 - Mage Xy
你是说你想把所有行都读入一个列表中吗?你有足够的内存吗? - Klitos Kyriacou
你无法将所有内容加载到列表中。这样会导致内存不足。 - PM 77-1
使用您发布的示例,您可以使用reader.readLine()来读取行。 - Evan LaHurd
1
1千万并不是一个很大的数字,我不明白为什么要担心内存。每行100个字符,只需要1GB的内存。 - Marko Topolnik
显示剩余2条评论
1个回答

5

我认为内置解决方案应该足够快:

List<String> allLines = Files.readAllLines(Paths.get("location/of/your/file"));

(假设您的JVM有足够的内存)

这对我有很大帮助,谢谢。如果我必须在列表中的每个字符串上调用一个方法(构造函数)Class(String s),有没有一种快速的方式可以一次完成所有操作,而不需要先生成List<String>? - Exagon
@Exagon 你是想基于List<String>创建List<YourClass>吗?如果是,那么这个列表的唯一目的是创建其他列表还是你还需要在其他地方使用它? - Pshemo
2
如果你想创建一个流来处理读取时的行,而不必创建一些临时列表,你也可以使用Files.lines(Paths.get("location/of/your/file")).parallel()。顺便说一下,map(c -> new MyClass(c))可以用更简短、更易读的方式替换为.map(MyClass::new) - Pshemo
我怀疑你无法加速它。也许可以考虑使用数据库来代替文本文件?从文本文件中读取需要检查每个字符以查看是否为行尾,而数据库应该至少跳过那部分(至少我希望如此)。 - Pshemo
为了确定是您的应用程序占用了大量时间,还是仅仅读取大文件需要很长时间,您应该计时仅读取文件所需的时间。例如,在Windows上,使用copy filename nul命令,在Linux上使用cp filename /dev/null命令。将这个时间从您的应用程序时间中减去,以查看您的应用程序使用了多少时间。 - Klitos Kyriacou
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接