非常简单的问题,假设我有一个大文件,我的目的是读取每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
}
});
}
}
PORPOSE:编写代码来处理不同线程上的每个行,考虑到最后一个块,具有最佳性能/优化。
P.S - 不要先读取整个文件并将其存储在内存中...我想在迭代期间这样做...
Source
.fromFile("fileName")
.getLines
.grouped(200)
.foreach(doStuff)
这是一个通常的情况,当你处理相等的部分,最后一部分将小于块大小但大于0,不包括tot_lines % chunk_size == 0
的情况。你可以做的是在while循环结束后运行一个新的最终线程。在chunk
数组中,您将拥有剩余的行。