用Java分割文件以进行多线程处理

时间:2015-06-01 21:24:00

标签: java multithreading file io filesplitting

对于我正在处理的项目,我正在尝试尽可能快地计算文本文件中的元音。为了做到这一点,我正在尝试一种并发的方法。我想知道是否可以同时读取文本文件作为加速计数的方法?我认为瓶颈是I / O,从现在开始我通过缓冲读取器读取文件并逐行处理,我想知道是否可以一次读取文件的多个部分。

我最初的想法是使用 Split File - Java/Linux

但显然MappedByteBuffers的性能并不是很好,而且一旦我拆分,我仍然需要逐行读取每个MappedByteBuffer。

另一种选择是在读取一定数量的线后进行分割,但这会破坏目的。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

以下内容不会拆分文件 - 但可以帮助同时处理它!

在Java 8中使用Streams,您可以执行以下操作:

Stream<String> lines = Files.lines(Paths.get(filename));
lines.filter(StringUtils::isNotEmpty) // ignore empty lines

如果你想并行运行,你可以这样做:

lines.parallel().filter(StringUtils::isNotEmpty) 

在上面的示例中,我过滤了空行 - 但当然您可以通过实现自己的方法并调用它来将其修改为您的使用(计算元音)。