web-dev-qa-db-ja.com

Akka ByteStringをStringに変換する方法は?

これが愚かな質問であれば申し訳ありませんが、正直なところ、何らかのASCIIコード->文字マッパーを自分で設定することなく、私は正しいとは思わないそれを行う方法。

したがって、現在、ScalaとAkkaを使用して「チャットアプリケーション」を作成しています。ここで、別のクライアントとサーバーエンティティを使用します。クライアントはサーバーに接続し、メッセージを送信し、サーバーはそれ。

メッセージの送信が機能するようになりましたが、サーバー側でメッセージを読み続けることができなくなりました。メッセージを受信するたびに、メッセージの文字のASCII値を含むByteStringを取得します。このByteStringを実際の文字列に変換するにはどうすればよいですか?

関連するコード(サーバー側):

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

28
nbokmans

つかいます

scala> val data = ByteString("xyz")
data: akka.util.ByteString = ByteString(120, 121, 122)

scala> data.utf8String
res3: String = xyz

ByteString API を参照

またはgithubで:

最終的な定義utf8String:String = decodeString(StandardCharsets.UTF_8)

49
Andrzej Jozwik

次のようにdecodeStringメソッドを使用できます。

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

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