繁体   English   中英

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

[英]How to Handle last chunk of large File with java or scala

很简单的问题,假设我有一个大文件,我的目的是每200行读取一次,并在不同的线程上进行一些处理。 File很长,因此最后一个线程将无法获得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

                    }
                });
            }

        }

用途:编写代码来处理不同线程上的每个块,并考虑到最后一个块,以实现最佳性能/优化。

PS-不要先读取整个文件并分块存储在内存中...我认为是在迭代过程中执行...

      Source
        .fromFile("fileName")
        .getLines
        .grouped(200)
        .foreach(doStuff)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM