13

私は Scala で書かれたアクターと Java で書かれたアクターを持つ Akka アプリケーションを持っています。あるケースでは、Scala アクターが を書き、Array[Byte]これを Java アクターからデシリアライズする必要があります。このユースケースでは、最終的にJavaでの文字列表現が必要にArray[Byte]なるため、問題も解決します。

スカラアクター:

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?
4

3 に答える 3

24

Scala のArray[Byte]ものはすでに Java のもの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]
于 2014-03-13T13:49:51.807 に答える