如何使用Java或Scala处理最后一块大文件



非常简单的问题,假设我有一个大文件,我的目的是阅读每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数组中,您将拥有剩余的行。

最新更新