在我的scala代码中,我有一个akka流(Source [ByteString,Long]),我在这个流中搜索一个模式(例如“aabb”),如果存在该位置。
有可能吗?
该流包含基因组序列(20至64Mb)。如果序列包含32个核碱基的模式,那么可能这个序列很有意思,我将它保存在首次出现的位置,否则就是浪费。 如果使用了输入流,我可以创建一个32字节的字节缓冲区并检查bytebuffer中的序列。使用akka流还有另一种模式可以完成它
答案 0 :(得分:0)
这将是棘手的,因为字节模式可能跨越流中的两个ByteString
。
如果您确定所有消息都适合内存,最简单的方法是将流聚合成单个字节字符串并搜索。
可以不将流聚合到单个字符串中,但我不认为它是内置的.Akka HTTP中的akka.http.scaladsl.unmarshalling.MultipartUnmarshallers
代码显示了如何在流式传输中执行此操作方式,但它非常繁琐。 (Akka通过akka.http.impl.engine.parsing.BodyPartParser
状态机管道流。)
你的用例是什么?
大多数Reactive Streams只消耗一次,那么您打算如何处理索引呢?
如果您尝试解析HTTP实体中的MIME边界,请直接使用Akka的MultipartUnmarshallers代码。