如何使用java或scala处理大文件的最后一块
很简单的问题,假设我有一个大文件, 我的目的是每200行读一次,并在不同的线程上进行一些处理。该文件相当长,因此最后一个线程不会得到整整200行 我想了想:(但不知道如何解决剩下的最后一块……) PORPOSE: 编写代码来处理不同线程上的每一行块,并考虑最后一行块,以获得最佳性能/优化如何使用java或scala处理大文件的最后一块,java,algorithm,scala,java-8,Java,Algorithm,Scala,Java 8,很简单的问题,假设我有一个大文件, 我的目的是每200行读一次,并在不同的线程上进行一些处理。该文件相当长,因此最后一个线程不会得到整整200行 我想了想:(但不知道如何解决剩下的最后一块……) PORPOSE: 编写代码来处理不同线程上的每一行块,并考虑最后一行块,以获得最佳性能/优化 注意-不要先读取整个文件并将其分块存储在内存中…我认为在迭代过程中这样做…这是一种常见情况,当您以相等的部分处理某个内容时,最后一部分将小于块大小,但大于0,不包括总行数%chunk\u size==0的情况。
注意-不要先读取整个文件并将其分块存储在内存中…我认为在迭代过程中这样做…这是一种常见情况,当您以相等的部分处理某个内容时,最后一部分将小于块大小,但大于0,不包括
总行数%chunk\u size==0
的情况。您可以做的是在while循环结束后运行一个新的最终线程。在chunk
数组中,您将有剩余的行。Future(doStuff())来解决问题的线程部分。您好,正如您所建议的,解析到分组到内存中的整个文件好吗?我想对块进行迭代,这样每个块都会有未来……但是最后一块呢?@VitalyT,如果文件真的很大,将其分束处理可能是个好主意。这就是这个解决方案的实际用途Source.getLines
返回一个迭代器[String]
,该迭代器是惰性的,即在请求更多数据之前不会读取数据(IO缓冲除外,这对性能也有好处)。哇,很酷,我看到这是Scala,我试图在java8中找到解决方案,也许你们可以帮助,在java8中没有找到文件中的分组行…:(
Source
.fromFile("fileName")
.getLines
.grouped(200)
.foreach(doStuff)
Source
.fromFile("fileName")
.getLines
.grouped(200)
.foreach(doStuff)