pri*_*ain 6 java bufferedreader java-8 java-stream
有没有办法接收Stream<String> stream了的BufferedReader reader,使得每个字符串stream代表一行reader与该附加条件stream直接提供(之前reader读到的一切)?我想处理stream并行数据以获取它们reader以节省时间.
编辑:我想处理与阅读并行的数据.我不想并行处理不同的行.它们应该按顺序处理.
让我们举例说明我希望如何节省时间.假设我们reader将向我们展示100行.读取一行需要2 ms,处理1 ms需要1 ms.如果我先读取所有行然后处理它们,将需要300毫秒.我想要做的是:一旦读取一行,我想处理它并且并行读取下一行.总时间将为201毫秒.
我不喜欢的东西BufferedReader.lines():据我所知,当我想要处理这些线时,阅读开始了.我们假设我已经完成了reader但必须先进行预计算才能处理第一行.假设它们花费30毫秒.在上面的例子中,总时间将是231毫秒或301毫秒使用reader.lines()(你能告诉我哪些时间是正确的吗?).但是有可能在201毫秒内完成工作,因为预计算可以与读取前15行并行完成.
你可以用reader.lines().parallel().这样,您的输入将被拆分为块,并且将在块上并行执行进一步的流操作.如果进一步的操作需要很长时间,那么您可能会获得性能提升.
在您的情况下,默认启发式操作将无法正常工作,我想没有现成的解决方案可以让您使用单行批处理.您可以编写一个自定义分裂器,它将在每行之后分割.了解java.util.Spliterators.AbstractSpliterator实施情况.可能最简单的解决方案是编写类似的东西,但将批量大小限制为一个元素trySplit并在tryAdvance方法中读取单行.
| 归档时间: |
|
| 查看次数: |
3946 次 |
| 最近记录: |