簡體   English   中英

如何將 Java 字節數組轉換為 Scala 字節數組?

[英]How do I convert a Java byte array into a Scala byte array?

我是 Scala 的新手,目前正在從事一個涉及 Java 和 Scala 模塊的項目。 現在我想使用 byte[] 類型的參數從 Java 調用 Scala 方法。

Scala 方法具有簽名: def foo(data: Array[Byte])

Java 調用如下所示: foo(x) ,其中 x 的類型為byte[]

IDE 告訴我這是不可能的:

The method foo(Array) in the type Bar is not applicable for the arguments (byte[])

作為附加約束,最好不要更改 Scala 方法。 在 Java 方面,我嘗試使用Byte[] ,但這並沒有解決問題。 一定存在某種轉換?

正如其他人指出的那樣,轉換沒有問題。 我的 IDE 行為錯誤,並顯示編譯沒有問題的虛構錯誤。 此時下面代碼中main-method中receive方法的調用被標記為錯誤:

The method receive(Array) from the type ScalaByteReceiver refers to the missing type Array

但是這段代碼,它舉例說明了我的問題,編譯得很好並產生了預期的結果:

Java:

package stackOverflow;

public class JavaByteSender {    
    public static void main(String... args) {
    new ScalaByteReceiver().receive(new byte[4]);
    }
}

Scala:

package stackOverflow

import stackOverflow._

class ScalaByteReceiver{

  def receive(bytes: Array[Byte]) {    
    println(bytes.length);
    // prints 4
  }
}

所以 Java 和 Scala 很好地相互理解。

我試圖重現您的錯誤,但它按預期運行。 運行 scala 2.9.0 和 sbt

java 代碼:

package stackOverflow;

public class ByteContainer {

    private byte[] bytes;

    public ByteContainer(byte[] bytes){
        this.bytes = bytes;
    }

    public byte[] getBytes() {
        return bytes;
    }

    public void setBytes(byte[] bytes) {
        this.bytes = bytes;
    }

}

scala代碼:

package stackOverflow

import stackOverflow._

class ScalaByte{
    val bytes:Array[Byte] = "this is my test".getBytes()
}

object ByteUser extends App{
    val b = new ByteContainer((new ScalaByte()).bytes)
    val s = b.getBytes()
    println(s)
}

output:[B@6ef38f6f

這將編譯並運行。 這不是你要問的嗎? 隨時發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM