非常简单的问题,假设我有一个大文件,我的目的是阅读每200行,并在不同的线程上进行一些过程。该文件很长,因此最后一个线程不会完全获得200行。
我想到了一些事情:(但是没有得到如何解决剩余的最后一块....)
String[] chunk = new String[200];
int count = 0;
String line = null;
while ((line = bufferedReader.readLine()) != null) {
chunk[count % chunk.length] = line;
count++;
if (count % chunk.length == 0) {
exec.execute(new Runnable() {
@Override
public void run() {
// TODO process what ever
}
});
}
}
polpose:写代码以考虑到最后一块,以最佳性能/优化来处理不同线程上的每一行。
p.s-不要先阅读整个文件,然后存储在内存中...我想在迭代期间这样做...
Source
.fromFile("fileName")
.getLines
.grouped(200)
.foreach(doStuff)
这是一种常见的情况,当您处理相等的部分时,最后一部分将小于块大小,但不包括tot_lines % chunk_size == 0
的情况,大于0。您可以做的是在段循环结束后运行新的最终线程。在chunk
数组中,您将拥有剩余的行。