我碰到这篇博文 http://cognitiveentity.wordpress.com/2012/02/23/simpler-akka-io-example/,我发现它很棒并且很有启发性,展示了如何对发送到 Akka IO 套接字服务器的字符串消息进行固定长度的帧处理。我一直在使用我发现的一个开源库这里叫ScalaBuff https://github.com/SandroGrzicic/ScalaBuff,它在协议缓冲区对象之上创建了一个漂亮的薄层。
我遇到的麻烦是调整博客作者(无法找到直接联系他的链接)代码以获取长度(4 字节序列),然后获取 protobuf 字节数组。我可以稍后再考虑确定哪条消息正在传输,现在我只想让代码能够处理一条示例消息。
我的问题是,我在将 Akka IO 代码从提取 akka ByteStrings 转换为能够发送和提取 protobuf 消息中的原始字节时遇到问题。这是我对使用 Akka IO 的套接字服务器不熟悉的症状。我可以访问和访问 protobuf 对象的字节表示(a僵尸目击 http://www.kotancode.com/2012/10/14/using-google-protocol-buffers-in-objective-c-on-ios-and-the-mac/),但我无法从博客中获取示例来处理字节数组而不是字符串。
如果有人有一些建议、一些示例代码或一些关于如何从 A 点(上面提到的博客文章)到 B 点(一个 Akka IO 套接字客户端,将 protobuf 消息发送到 Akka IO 套接字服务器)的输入。我想我的客户正在工作......也许),那就太棒了。
尝试这个:
val myByteArray = myByteString.toArray // converts to an Array[Byte]
val myMessage = MyMessage.defaultInstance.mergeFrom(myByteArray)
MyMessage 是 ScalaBuff 编译器使用 MyMessage.proto 模板生成的类。请注意,Google protobuf 库有一个单独的 ByteString 类,请确保不要将两者混合。
更新:Kevin 的问题已经解决,基本上问题是他使用 Array[Byte] 的 toString 方法,而不是将字节数组包装在 new String() 中,新 String() 正确地将字节数组转换为字符串,用于“%s”.format 调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)