如何将 Scala Array[Byte] 转换为 Java byte[]?

我有一个Akka应用程序,其中的演员是用Scala编写的,其他人用Java编写的。在一个案例中,Scala Actor写了一个,我需要从Java Actor反序列化它。在这个用例中,我最终需要一个Java中的字符串表示,这样也可以解决我的问题。Array[Byte]Array[Byte]

Scala Actor:

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 Actor:

/**
 * {@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?

答案 1

Scala已经是Java的。证明:Array[Byte]byte[]

object ScalaSide extends Application {
  val a = Array[Byte](1, 2, 3)

  JavaSide.doSmth(a)
}

--

import java.util.Arrays;

public class JavaSide {
    public static void doSmth(Object arr) {
        byte[] b = (byte[]) arr;
        System.out.println(Arrays.toString(b));
    }
} 

结果:

[1, 2, 3]

答案 2

我没有看到Scala中的tell方法使用stdout。它发送一个 Any,Java 中的 onReceive 会接收一个对象。您需要做的就是像这样签入您的Java onReceive:

public void onReceive(Object object) throws Exception {

    if (object instanceof byte[]) {

        doSomething();
    }
    else if....

推荐