如何将Akka ByteString转换为String?

nbo*_*ans 30 scala akka

我很抱歉,如果这是一个愚蠢的问题,但我可以诚实地想不出它没有设立某种形式的ASCII码 - >字符映射器我自己,我不认为是这样做的正确方法.

所以目前我正在与Scala和Akka一起制作一个"聊天应用程序",我使用一个单独的客户端和服务器实体.客户端连接到服务器,发送消息,服务器对其执行某些操作.

我收到了发送消息的工作,但现在我一直在阅读服务器端的消息.每当我收到一条消息时,我都会得到一个ByteString,其中包含消息中字符的ASCII值.如何将此ByteString转换为实际的String?

相关代码(服务器端):

package chatapp.server

import java.net.InetSocketAddress

import akka.actor.{Actor, ActorSystem}
import akka.io.Tcp._
import akka.io.{IO, Tcp}

/**
  * Created by Niels Bokmans on 30-3-2016.
  */
class ServerActor(actorSystem: ActorSystem) extends Actor {
  val Port = 18573
  val Server = "localhost"

  IO(Tcp)(actorSystem) ! Bind(self, new InetSocketAddress("localhost", Port))

  def receive: Receive = {

    case CommandFailed(_: Bind) =>
      println("Failed to start listening on " + Server + ":" + Port)
      context stop self
      actorSystem.terminate()

    case Bound(localAddress: InetSocketAddress) =>
      println("Started listening on " + localAddress)

    case Connected(remote, local) =>
      println("New connection!")
      sender ! Register(self)
    case Received(data) =>
      println(data)
  }
}
Run Code Online (Sandbox Code Playgroud)

服务器的图片(如您所见,它接受连接 - >接收新连接 - >从连接接收消息): 服务器端

客户端的图片(连接到服务器然后发送消息"testmessage") 客户端

And*_*wik 51

使用

scala> val data = ByteString("xyz")
data: akka.util.ByteString = ByteString(120, 121, 122)

scala> data.utf8String
res3: String = xyz
Run Code Online (Sandbox Code Playgroud)

ByteString API,

或者在github上:

final def utf8String:String = decodeString(StandardCharsets.UTF_8)


小智 22

你可以使用这样的decodeString方法:

scala> val x = ByteString("abcd")
x: akka.util.ByteString = ByteString(97, 98, 99, 100)

scala> x.decodeString("US-ASCII")
res0: String = abcd
Run Code Online (Sandbox Code Playgroud)