2016-03-30 35 views
19

Es tut mir leid, wenn dies eine dumme Frage ist, aber ich kann es ehrlich gesagt nicht herausfinden, ohne irgendeine Art von ASCII-Code -> Character Mapper einzurichten, was ich nicht für den richtigen Weg halte.Wie konvertiert man Akka ByteString in String?

Also mache ich gerade eine "Chat-Anwendung" mit Scala und Akka, wo ich eine separate Client- und Server-Einheit verwende. Der Client verbindet sich mit dem Server, sendet eine Nachricht und der Server macht etwas damit.

Ich habe das Senden einer Nachricht funktioniert, aber jetzt bin ich auf dem Lesen der Nachricht Server-Seite fest. Immer wenn ich eine Nachricht erhalte, erhalte ich einen ByteString, der die ASCII-Werte der Zeichen aus der Nachricht enthält. Wie konvertiere ich diesen ByteString in einen tatsächlichen String?

Relevante Code (serverseitig):

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

Bild von Server (wie Sie sehen können es akzeptiert Verbindungen -> eine neue Verbindung empfängt -> erhält eine Nachricht von der Verbindung): Server side

Bild von Client (eine Verbindung zum Server und sendet dann Meldung „Testmessage“) Client side

Antwort

20

Sie die decodeString Methode wie folgt verwenden können:

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

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

Beachten Sie, dass dies nicht für die angegebene Codierung auf ungültige Byte-Sequenzen nicht werfen. Zum Beispiel, ByteString (192) .decodeString (ByteString.UTF_8) ' –

Verwandte Themen