我正在使用 Files.lines() 从大文件(8GB+)读取行。如果按顺序处理,它会很好地工作,并且内存占用非常低。一旦我将parallel()添加到流中,它似乎就会永远挂在它正在处理的数据上,最终导致内存不足异常。我相信这是 Spliterator 在尝试拆分时缓存数据的结果,但我不确定。我剩下的唯一想法是编写一个带有 trySplit 方法的自定义 Spliterator,该方法剥离少量数据进行拆分,而不是尝试将文件拆分为一半或更多。有人遇到过这种情况么?
Java 8中的新Stream API非常好用,特别是对于并行处理功能.但是,我没有看到如何在Collections parallelStream方法之外应用并行处理.
例如,如果我从文件创建一个Stream,我使用以下内容:
Stream<String> lines = Files.lines(Paths.get("test.csv"));
Run Code Online (Sandbox Code Playgroud)
但是,没有对应的parallelStream方法,就像在Collections中一样.看起来可能有一个线程抓住下一行,而可能有几个线程解析和处理这些行.
这可以通过StreamSupport.stream()来完成吗?