将Array <byte>转换为ByteArray </byte>的规范方法是什么?

时间:2015-02-22 23:58:50

标签: arrays interop kotlin

如果有一个数组并希望将其转换为ByteArray,我应该怎么做呢?例如,以下内容失败:

var srcArray = Array<Byte>(10, { 0 })
var tgtArray: ByteArray = srcArray as ByteArray

我确实知道像ByteArray这样的专业类是:

  

...与Array类无关,并且被编译为Java的原始数组以获得最佳性能。

所以,我的方法失败的事实不应该让我感到惊讶 - 但是进行转换的规范方法是什么?只需遍历srcArray并一次填充tgtArray一个索引 - 或者是否有一个我更缺的更优雅的解决方案?

2 个答案:

答案 0 :(得分:3)

除了明显的基于循环的方法之外,我没有看到任何内置函数。但你可以自己定义一个这样的扩展函数:

fun Array<Byte>.toPrimitive(): ByteArray {
    val tgtArray: ByteArray = ByteArray(this.size())

    for (i in this.indices) {
        tgtArray[i] = this[i]
    }

    return tgtArray
}

fun test() {
    val srcArray = Array<Byte>(10, { 0 })

    val tgtArray: ByteArray = srcArray.toPrimitive()
}

答案 1 :(得分:1)

Kotlin在stdlib中将此作为扩展函数Array<Byte>.toByteArray()

val srcArray = Array<Byte>(10, { 0 })
val tgtArray = srcArray.toByteArray()

注意:我将您的var更改为val,这在Kotlin中更常见,以使用只读值

对于具有数组实现的其他原始数据类型,您将看到类似的类型。您可以在Kotlin documentation for Array extension functions

中查看所有内容