【发布时间】:2013-02-17 15:42:47
【问题描述】:
我最近在一次采访中被问到这个问题。
给定一个输入文件、一个正则表达式和一个输出文件。读取输入文件,将每一行与正则表达式匹配,并将匹配的行写入输出文件。
我想出了使用链接到 FileReader 的 BufferedReader 的粗略方案(以优化从磁盘读取)。我使用了类似的写作方案。
然后面试官说这个过程需要 3 秒从文件中读取一行,1 秒将正则表达式与该行进行比较,另外 5 秒写回。所以每行总共需要9秒。我们该怎样改进这个?
我建议一次读取整个文件,处理它并立即写入整个输出文件。但是,有人告诉我这无济于事(写 1 行 = 5 秒,写 2 行 = 10 秒)。
面试官进一步表示,这是由于硬件/硬盘驱动器的限制。有人问我如何改进我的代码以减少每行的总秒数(当前为 9 )?
我只能想到缓冲读/写,也找不到太多关于 SO 的内容。有什么想法吗 ?
【问题讨论】:
-
多线程和同步?您不必等待 1 秒进行正则表达式处理并继续阅读下一行。正则表达式处理结束后,另一个线程正在等待匹配的行可以写入输出。但我怀疑这最后一步会带来很大的改进,因为你有一张光盘,它可以读取或写入一个特定的时刻。
标签: java file file-io filestream bufferedreader