对不起,如果这是一个愚蠢的问题,但我真的不能在没有设置某种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)
}
}
答案 0 :(得分:49)
使用
scala> val data = ByteString("xyz")
data: akka.util.ByteString = ByteString(120, 121, 122)
scala> data.utf8String
res3: String = xyz
请参阅ByteString API,
或在github上:
final def utf8String: String = decodeString(StandardCharsets.UTF_8)
答案 1 :(得分:21)
您可以使用decodeString
方法,如下所示:
scala> val x = ByteString("abcd")
x: akka.util.ByteString = ByteString(97, 98, 99, 100)
scala> x.decodeString("US-ASCII")
res0: String = abcd