哪个更有效地获取文本文件中的第 n 行?使用 Java 的 BufferedReader 进行迭代,或者拆分为子文件然后获取每个子文件的顶行?

Which is more efficient to get every nth line in text file? Iterate with Java's BufferedReader, or split into subfiles then take top line of each?

我有一个非常大的数据集,我想要获取每第 n 行的最快方法(例如,如果文件有 1M 行长,我想要每第 1000 行)。

理想情况下,我正在寻找一种跳转到每个行号的方法,但我还没有找到一种方法来做到这一点。

我的解决方法是拆分原始数据文件(使用 Unix "split" 命令)然后取每个文件的顶行。

我很好奇是否有一种方法可以跳转到 Java 中的特定行号,而无需遍历文件中的其他行。如果不是,拆分文件或使用 BufferedReader 直到到达我想要的行是否更有效?

非常感谢任何帮助!

拆分成子文件没有什么值得推荐的。它增加了延迟和浪费 space。它与您的第一个解决方案的工作相同,而且更多。

您可以使用 BufferedReader 每秒阅读数百万行。用简单的方法来做。使用扩展 BufferedReaderLineNumberReader,并读取行数直到行数达到您想要的数量。