我需要用Java编写一个程序,它将读取目录树中相对大量(〜50,000个)文件,处理数据并将处理后的数据输出到单独的(平坦的)目录。并行读取和写入多个文件
目前,我有这样的事情:
private void crawlDirectoyAndProcessFiles(File directory) {
for (File file : directory.listFiles()) {
if (file.isDirectory()) {
crawlDirectoyAndProcessFiles(file);
} else {
Data d = readFile(file);
ProcessedData p = d.process();
writeFile(p,file.getAbsolutePath(),outputDir);
}
}
}
我只想说,每个这样的方法被删除,下调为便于阅读,但他们都做工精细。整个过程工作正常,但速度很慢。数据处理通过远程服务进行,需要5-15秒。乘以5万...
我从来没有做过任何事情多线程之前,但我想我可以得到一些相当不错的速度提高,如果我这样做。任何人都可以提供一些指导我如何有效地平行这种方法?
文件的大小和处理的密度如何?我问,因为如果有更多的时间花在从磁盘读取文件上,那么你实际上不会在线程中获得太多的收益。 – SimonC 2012-01-05 05:01:05
对于几乎可以确定为磁盘绑定的任务,您不太可能获得任何加速。除非您试图并行化位于不同物理驱动器上的目录... – Mysticial 2012-01-05 05:02:00
您是将输出转换为单个文件还是每个文件的文件? – MahdeTo 2012-01-05 05:13:56