Search code examples
javascalainteroplanguage-interoperability

How to convert a Scala Array[Byte] to Java byte[]?


I have an Akka application with actors written in Scala and others in Java. In one case a Scala Actor writes an Array[Byte] and I need to deserialize this from a Java Actor. In this use-case I ultimately need a String representation in Java of the Array[Byte] so that would also solve my problem.

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?

Solution

  • Scala's Array[Byte] is already a Java's byte[]. Proof:

    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));
        }
    } 
    

    Result:

    [1, 2, 3]