5

我遇到了这篇博文,我觉得这篇博文很棒而且很有启发性,它展示了如何对发送到 Akka IO 套接字服务器的字符串消息进行固定长度的框架。我一直在使用我在这里找到的一个名为 ScalaBuff的开源库,它在协议缓冲区对象之上创建了一个很好的薄层。

我遇到的麻烦是调整博客作者的(找不到直接联系他的链接)代码来获取长度(4 字节序列),然后是 protobuf 字节数组。我可能会担心稍后确定在线上是哪条消息,现在我只想让代码与一个示例消息一起工作。

我的问题是我无法将 Akka IO 代码从提取 akka ByteStrings 转换为能够从 protobuf 消息中发送和提取原始字节。这是我对使用 Akka IO 的套接字服务器不熟悉的症状。我可以往返于我的 protobuf 对象(一个Zombie Sighting)的字节表示,但我只是无法从博客中获取样本来处理字节数组而不是字符串。

如果有人对如何从 A 点(上面提到的博客文章)到 B 点(向 Akka IO 套接字服务器发送 protobuf 消息的 Akka IO 套接字客户端)有一些建议、一些示例代码或一些输入。我认为我有客户工作..也许),那太棒了。

4

1 回答 1

0

尝试这个:

val myByteArray = myByteString.toArray // converts to an Array[Byte]
val myMessage = MyMessage.defaultInstance.mergeFrom(myByteArray)

MyMessage 是使用 MyMessage.proto 模板的 ScalaBuff 编译器生成的类。请注意,Google protobuf 库有一个单独的 ByteString 类,请确保不要将两者混为一谈。

更新:凯文的问题已经解决,基本上问题是他使用 Array[Byte] 的 toString 方法,而不是将字节数组包装在 new String() 中,它正确地将字节数组转换为字符串,在 "%s".format 调用中使用。

于 2013-02-02T01:16:59.790 回答