我遇到了 this blog post,我发现它很棒,很有启发性,展示了如何对发送到Akka IO套接字服务器的字符串消息进行固定长度的构建.我一直在使用我发现的开源库 here called ScalaBuff,它在协议缓冲区
我遇到的麻烦是调整博客作者(找不到直接联系他的链接)代码来获取长度(4字节序列)然后是protobuf字节数组.我可以担心以后找出哪条消息在线上,现在我只想让代码使用一条示例消息.
我的问题是我无法将Akka IO代码从akka ByteStrings转换为能够从protobuf消息发送和拉取原始字节.这是我对使用Akka IO的套接字服务器不熟悉的一种表现.我可以从我的protobuf对象(Zombie Sighting)的字节表示中获取,但我无法从博客中获取样本来处理字节数组而不是字符串.
如果有人有一些建议,一些示例代码,或者如何从A点(上面提到的博客文章)到B点(一个Akka IO套接字客户端,将一个protobuf消息发送到Akka IO套接字服务器)的一些输入…我我认为我有客户工作..也许),这将是非常棒的.
试试这个:val myByteArray = myByteString.toArray // converts to an Array[Byte] val myMessage = MyMessage.defaultInstance.mergeFrom(myByteArray)
MyMessage是使用MyMessage.proto模板的ScalaBuff编译器生成的类.请注意,Google protobuf库有一个单独的ByteString类,请确保不要混用这两个类.
更新:凯文的问题已经解决了,基本上问题是他使用的是一个数组[Byte]的toString方法,而不是将字节数组包装在一个新的String()中,它正确地将字节数组转换为字符串,用于“%s”.格式调用.