目前我有一个解析器设置,它将解析约 200 万条记录的 csv 文件。然后我应用一些过滤算法来清除我想要包含/排除的记录。最后将所有内容写回一个新的 csv 文件。
我做了一些基准测试,结果发现将数据写入 csv 非常昂贵,并且在同时过滤和附加到文件时会导致速度大幅下降。我想知道我是否可以执行所有过滤,将要写入的行放入队列中,然后当队列已满或所有过滤完成时,让第二个进程自行执行所有写入。
所以基本上总结一下:
Read line
Decide whether to discard or keep
if I'm keeping the file, add it to the "Write Queue"
Check if the write queue is full, if so, start the new process that will begin writing
Continue filtering until completed
感谢你的帮助!
编辑: 我写的方式如下:
FileWriter fw = new FileWriter("myFile.csv");
BufferedWriter bw = new BufferedWriter(fw);
while(read file...) {
//perform filters etc...
try {
bw.write(data.trim());
bw.newLine();
}catch(IOException e) {
System.out.println(e.getMessage());
}