2016-03-30 9 views
19

これはちょっと疑問ですが、正直なところ、ASCIIコードを設定せずにそれを理解することはできません。文字マッパーを自分で作っていますが、これは正しい方法ではないと思います。Akka ByteStringをStringに変換するには?

現在、私は別のクライアントとサーバーエンティティを使用するScalaとAkkaを使って "チャットアプリケーション"を作っています。クライアントはサーバーに接続し、メッセージを送信し、サーバーはそれを使って何かを行います。

私はメッセージの送信を手に入れましたが、今はメッセージのサーバー側を読んでいません。私はメッセージを受け取るたびに、メッセージの文字のASCII値を含むByteStringを取得します。この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) 
    } 
} 

画像は(あなたが見ることができるように、それが接続を受け入れる - >新しい接続を受け取る - >接続からメッセージを受信): Server side

クライアントの

画像が(サーバーに接続し、「testmessage」メッセージを送信します) Client side

答えて

20

あなたはこのようdecodeStringメソッドを使用することができます:

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

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

注意を。たとえば、 'ByteString(192).decodeString(ByteString.UTF_8)' –

関連する問題