【发布时间】:2014-04-18 07:08:06
【问题描述】:
我有一个 Akka 应用程序,其中包含用 Scala 编写的演员和其他用 Java 编写的演员。在一种情况下,Scala Actor 编写了一个Array[Byte],我需要从 Java Actor 反序列化它。在这个用例中,我最终需要Array[Byte] 的 Java 字符串表示形式,这样也可以解决我的问题。
斯卡拉演员:
val outputStream = new java.io.ByteArrayOutputStream()
val bufferedOutputStream = new java.io.BufferedOutputStream(outputStream, 1024)
val exitCode : Integer = processBuilder #> bufferedOutputStream !
bufferedOutputStream.flush
val content = outputStream.toByteArray // this gives an Array[Byte]
javaActorRef.tell(content, getSelf())
Java 演员:
/**
* {@inheritDoc}
*/
@Override
public void onReceive(Object object) throws Exception {
// object has a Scala Array[Byte] how do I convert here to
// byte[] or to String?
【问题讨论】:
-
它们有什么不同吗?我认为您可以从 Java 访问 Scala 对象,因为它们都是 JVM 技术。你试过什么?如果你想传递字符串,你能传递一个 char[] 数组吗?
-
我可以发送字符串,这没问题。但是,发送 Array[Byte] 的 Scala 角色是通用的,因为它只接受任何命令的标准输出。在某些用例中,输出为字符串,如本例所示,但 Actor 也可用于进程输出为二进制的其他上下文。
标签: java scala interop language-interoperability