2016-03-30 4 views
19

Mi dispiace se questa è una domanda stupida, ma onestamente non riesco a capirlo senza impostare una sorta di codice ASCII -> mappatore di caratteri me stesso, che non penso sia il modo giusto per farlo.Come convertire Akka ByteString in String?

Attualmente sto creando una "applicazione di chat" con Scala e Akka in cui utilizzo un'entità client e server separata. Il client si connette al server, invia un messaggio e il server fa qualcosa con esso.

Ho ricevuto l'invio di un messaggio funzionante, ma ora sono bloccato a leggere il messaggio sul lato server. Ogni volta che ricevo un messaggio ottengo un ByteString contenente i valori ASCII dei caratteri del messaggio. Come posso convertire questo ByteString in una stringa effettiva?

relativo codice (lato server):

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) 
    } 
} 

Immagine di Server (come si può vedere che accetta connessioni -> riceve una nuova connessione -> riceve un messaggio dalla connessione): Server side

Immagine di cliente (si connette al server e quindi invia il messaggio "testmessage") Client side

risposta

20

È possibile utilizzare il metodo decodeString in questo modo:

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

scala> x.decodeString("US-ASCII") 
res0: String = abcd 
+0

Si noti che questo non si butta sulle sequenze di byte non validi per la codifica specificata. Ad esempio, 'ByteString (192) .decodeString (ByteString.UTF_8)' –