【发布时间】:2015-04-22 21:46:15
【问题描述】:
我想要几个threads 来读取文件。这些文件是 ZIP 文件,其中包含几个文本文件本身。因此必须逐行读取每个文件。
文件的任何内容都应该发送到某种queue。队列本身应该由工作线程无限处理。
如果可能的话,如何实现这样的场景? 我想出了一些伪代码,但我真的不知道如何实现:
Queue<String> queue;
//multiple threads:
BufferedReader br;
queue.add(br.readLine());
//processing thread for the queue:
queue.stream().parallel().forEach(line -> convertAndWrite(line));
//worker function:
private void convertAndWrite(String line) {
//convert the line to an output format,
//and write each line eg to an output file or perist in DB, whatever
}
【问题讨论】:
-
与其让线程读取文件,不如将整个事情作为一个大的并行流来完成几乎肯定会更简单——
Stream.of(files).parallel().flatMap(Files::lines).forEach(line -> line.convertAndWrite(line))。 -
@LouisWasserman 不幸的是你不能那样做,因为
Files.lines()throwsIOException;另外,我不确定在这种情况下是否调用了它的.close()方法 -
@fge:是的,关闭将正常工作,但您可能必须处理 IOException。不过,我希望基于这种方法的东西比尝试像这样流式处理队列更容易。
-
但是当你并行写行时,你可能不会按照你收到的顺序得到它们。我希望它不会损坏 .zip 文件。
标签: java java-8 java-stream