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

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

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

我意识到,虽然专门的类,如ByteArray是:

…与Array类无关,为了获得最佳性能,将其编译到Java的原始数组中。

所以,我的方法失败的事实不应该让我感到惊讶 – 但是转换的规范方式是什么? 简单地遍历srcArray并一次填充一个索引tgtArray – 还是有一个更优雅的解决方案,我错过了吗?

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

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

Kotlin在stdlib中有这样一个扩展函数Array<Byte>.toByteArray()

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

注:我把你的var更改为val ,这在Kotlin中更常见,使用只读值

对于具有数组实现的其他基本数据类型,您将看到类似的数据类型。 您可以在Kotlin文档中查看它们以获取阵列扩展功能 。