2016-03-30 18 views
19

Tôi xin lỗi nếu đây là một câu hỏi ngớ ngẩn nhưng tôi thành thật không thể hình dung ra mà không thiết lập một số loại mã ASCII -> bản thân nhân vật bản đồ, mà tôi không nghĩ là đúng cách để làm điều đó.Làm thế nào để chuyển đổi Akka ByteString thành String?

Vì vậy, hiện tại tôi đang tạo một "ứng dụng trò chuyện" với Scala và Akka, nơi tôi sử dụng một thực thể máy khách và máy chủ riêng biệt. Máy khách kết nối với máy chủ, gửi một tin nhắn và máy chủ thực hiện điều gì đó với nó.

Tôi nhận được tin nhắn đang gửi đi nhưng giờ tôi bị kẹt khi đọc thư phía máy chủ. Bất cứ khi nào tôi nhận được một tin nhắn tôi nhận được một ByteString chứa các giá trị ASCII của các ký tự từ tin nhắn. Làm thế nào để chuyển đổi ByteString này thành một chuỗi thực tế?

mã có liên quan (server-side):

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

Hình ảnh của máy chủ (như bạn có thể nhìn thấy nó chấp nhận kết nối -> nhận được một kết nối mới -> nhận được một tin nhắn từ kết nối): Server side

Hình ảnh của khách hàng (kết nối với máy chủ và sau đó gửi thông báo "testmessage") Client side

Trả lời

20

Bạn có thể sử dụng phương pháp decodeString như thế này:

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

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

Lưu ý rằng điều này không vứt trên chuỗi byte không hợp lệ cho mã hóa theo quy định. Ví dụ, 'ByteString (192) .decodeString (ByteString.UTF_8)' –

Các vấn đề liên quan