在akka流中查找模式

时间:2016-11-18 06:48:56

标签: scala stream

在我的scala代码中,我有一个akka流(Source [ByteString,Long]),我在这个流中搜索一个模式(例如“aabb”),如果存在该位置。

有可能吗?

该流包含基因组序列(20至64Mb)。如果序列包含32个核碱基的模式,那么可能这个序列很有意思,我将它保存在首次出现的位置,否则就是浪费。 如果使用了输入流,我可以创建一个32字节的字节缓冲区并检查bytebuffer中的序列。使用akka流还有另一种模式可以完成它

1 个答案:

答案 0 :(得分:0)

这将是棘手的,因为字节模式可能跨越流中的两个ByteString

如果您确定所有消息都适合内存,最简单的方法是将流聚合成单个字节字符串并搜索。

可以不将流聚合到单个字符串中,但我不认为它是内置的.Akka HTTP中的akka.http.scaladsl.unmarshalling.MultipartUnmarshallers代码显示了如何在流式传输中执行此操作方式,但它非常繁琐。 (Akka通过akka.http.impl.engine.parsing.BodyPartParser状态机管道流。)

问题需要澄清

你的用例是什么?

大多数Reactive Streams只消耗一次,那么您打算如何处理索引呢?

如果您尝试解析HTTP实体中的MIME边界,请直接使用Akka的MultipartUnmarshallers代码。