gpt4 book ai didi

java - 如何在 Java 中快速搜索大文件中的字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:58:24 26 4
gpt4 key购买 nike

我正在尝试使用以下方法在大型文本文件 (400MB) 中搜索特定字符串:

File file = new File("fileName.txt");
try {
int count = 0;
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()) {
if(scanner.nextLine().contains("particularString")) {
count++;
System.out.println("Number of instances of String: " + count);
}
}
} catch (FileNotFoundException e){
System.out.println(e);
}

这适用于小文件,但对于这个特定文件和其他大文件,它需要的时间太长(>10 分钟)。

最快、最有效的方法是什么?

我现在更改为以下内容并在几秒钟内完成 -

try {
int count = 0;
FileReader fileIn = new FileReader(file);
BufferedReader reader = new BufferedReader(fileIn);
String line;
while((line = reader.readLine()) != null) {
if((line.contains("particularString"))) {
count++;
System.out.println("Number of instances of String " + count);
}
}
}catch (IOException e){
System.out.println(e);
}

最佳答案

首先计算出您实际读取整个文件的内容所花费的时间与扫描它们以查找您的模式所花费的时间。

如果您的结果主要由阅读时间决定(并且假设您正确阅读了它,那么 channel 或至少缓冲了读者)就没什么可做的了。

如果扫描时间占主导地位,您可以读取所有行,然后将要搜索的小批量行发送到工作队列中,您可以让多个线程获取行批处理并在其中进行搜索。

大概数字

  • 假设硬盘读取速度为 50 MB/秒(按照现代标准,这已经很慢了),您应该能够在 <10 秒内将整个文件读入内存。
  • 查看 MD5 哈希速度基准(示例 here)向我们表明,哈希率至少可以(通常更快)与磁盘读取速度一样快。此外,字符串搜索比哈希更快、更简单并且并行化效果更好。

鉴于这 2 个估计值,我认为正确的实现可以轻松地使您的运行时间达到 10 秒左右(如果您在读取行批处理时开始启动搜索作业),并且主要由磁盘读取时间决定。

关于java - 如何在 Java 中快速搜索大文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com