迭代地迭代Akka ByteString

时间:2016-01-21 13:47:43

标签: scala akka

我从TCP服务器收到ByteString的数据。消息以最后一个字节为0x03结束。对于我收到的每个ByteString,我需要检查最后一个字节是否为0x03。现在我打电话给lastIndexof

val data : ByteString = ...

if (data.lastIndexOf(0x03) >= 0) {}

但这是低效的,因为对于大多数消息块,它将无缘无故地遍历所有字节。有没有办法反向迭代字节?

2 个答案:

答案 0 :(得分:1)

由于ByteStringSeq,您可以

if (data.last == 0x03) {}

但我不知道它是如何实现的,所以我不能保证它不会遍及整个事情。

答案 1 :(得分:1)

ByteStringIndexedSeq,因此在恒定或接近恒定的时间内,您应该可以执行以下操作:

val terminated = data.lastOption.filter(_ == 0x03).getOrElse(false)

在幕后,这将使用apply方法来获取长度为1的元素。 lengthapply都应根据IndexedSeq文档以恒定或接近恒定的时间执行。

Indexed sequences support constant-time or near constant-time element access and length computation