是否有更简洁和/或更高效的方式来遍历message
而不是我在这里?
import akka.util.ByteString
@throws[GarbledMessageException]
def nextValue(message: ByteString) =
message.indexOf(delimiter) match {
case i if i >= 0 => message.splitAt(i)
case _ => throw new GarbledMessageException("Delimiter Not Found")
}
@tailrec
def processFields(message: ByteString): Unit = nextValue(message) match {
case (_, ByteString.empty) => // Complete Parsing
case (value, rest) =>
// Do work with value
// loop
processFields(rest)
}
为每个分割创建一个新的ByteString会损害性能,但至少不会复制底层的Buffer,只会计算引用数。
也许它可能比那更好?
答案 0 :(得分:1)
具体取决于你正在做什么样的工作,但是如果你正在寻找比分离ByteStrings更高效的东西,请看ByteIterator,你可以通过调用{{1}来获得在ByteString上。
ByteIterator允许您直接转到原始值(整数,浮点数等),而不必先拆分新的ByteStrings。