Comment convertir Akka ByteString en Chaîne?
Je suis désolé si c'est une question stupide, mais honnêtement, je peux pas le comprendre sans mettre en place une sorte de code ASCII -> le caractère mappeur de moi, ce que je ne pense pas de la bonne façon de le faire.
Donc, actuellement, je suis en train de faire une "application de chat" avec Scala, Akka où je utiliser un autre client et le serveur de l'entité. Le client se connecte au serveur, envoie un message, et le serveur n'quelque chose avec elle.
J'ai reçu l'envoi d'un message de travail, mais maintenant je suis bloqué sur la lecture du message de serveur-côté. Chaque fois que je reçois un message, je reçois un ByteString contenant les valeurs ASCII des caractères du message. Comment puis-je convertir ce ByteString dans une Chaîne réelle?
Code (côté serveur):
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)
}
}
Image de serveur (comme vous pouvez le voir il accepte les connexions -> reçoit une nouvelle connexion -> reçoit un message de la connexion):
Image du client se connecte au serveur et envoie ensuite le message "testmessage")
Vous devez vous connecter pour publier un commentaire.
Utilisation
voir ByteString API,
ou sur github:
final def utf8String: String = decodeString(StandardCharsets.UTF_8)
ByteString
contiennent des caractères. Si elle ne contient que quelques octets de caractères codés sur plusieurs octets alors le comportement est indéterminé (selon les docs pourString
).Vous pouvez utiliser le
decodeString
méthode comme ceci:ByteString(192).decodeString(ByteString.UTF_8)