Scala - 遍历ByteString直到空

时间:2015-02-21 02:46:23

标签: scala akka

是否有更简洁和/或更高效的方式来遍历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,只会计算引用数。

也许它可能比那更好?

1 个答案:

答案 0 :(得分:1)

具体取决于你正在做什么样的工作,但是如果你正在寻找比分离ByteStrings更高效的东西,请看ByteIterator,你可以通过调用{{1}来获得在ByteString上。

ByteIterator允许您直接转到原始值(整数,浮点数等),而不必先拆分新的ByteStrings。