scala - latest - ¿Cómo convertir Akka ByteString en String?
akka tutorial (2)
Puedes usar el método decodeString
así:
scala> val x = ByteString("abcd")
x: akka.util.ByteString = ByteString(97, 98, 99, 100)
scala> x.decodeString("US-ASCII")
res0: String = abcd
Lo siento si esta es una pregunta estúpida, pero honestamente no puedo resolverlo sin configurar algún tipo de código ASCII -> mapeador de caracteres, lo cual no creo que sea la forma correcta de hacerlo.
Así que actualmente estoy haciendo una "aplicación de chat" con Scala y Akka, donde uso una entidad de servidor y cliente separada. El cliente se conecta al servidor, envía un mensaje y el servidor hace algo con él.
Obtuve el envío de un mensaje de trabajo, pero ahora estoy atascado en leer el lado del servidor de mensajes. Cada vez que recibo un mensaje, obtengo una ByteString que contiene los valores ASCII de los caracteres del mensaje. ¿Cómo convierto este ByteString en una cadena real?
Código relevante (lado del servidor):
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)
}
}
Imagen del servidor (como puede ver, acepta conexiones -> recibe una nueva conexión -> recibe un mensaje de la conexión):
Imagen del cliente (se conecta al servidor y luego envía el mensaje "mensaje de prueba")
Utilizar
scala> val data = ByteString("xyz")
data: akka.util.ByteString = ByteString(120, 121, 122)
scala> data.utf8String
res3: String = xyz
ver la API de ByteString ,
o en github:
final def utf8String: String = decodeString (StandardCharsets.UTF_8)