如何使用java或scala处理最后一大块文件

问题描述 投票:0回答:2

非常简单的问题,假设我有一个大文件,我的目的是读取每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 - 不要先读取整个文件并将其存储在内存中...我想在迭代期间这样做...

java algorithm scala java-8
2个回答
1
投票
      Source
        .fromFile("fileName")
        .getLines
        .grouped(200)
        .foreach(doStuff)

0
投票

这是一个通常的情况,当你处理相等的部分,最后一部分将小于块大小但大于0,不包括tot_lines % chunk_size == 0的情况。你可以做的是在while循环结束后运行一个新的最终线程。在chunk数组中,您将拥有剩余的行。

© www.soinside.com 2019 - 2024. All rights reserved.