如果有一个数组并希望将其转换为ByteArray,我应该怎么做呢?例如,以下内容失败:
var srcArray = Array<Byte>(10, { 0 })
var tgtArray: ByteArray = srcArray as ByteArray
我确实知道像ByteArray这样的专业类是:
...与Array类无关,并且被编译为Java的原始数组以获得最佳性能。
所以,我的方法失败的事实不应该让我感到惊讶 - 但是进行转换的规范方法是什么?只需遍历srcArray并一次填充tgtArray一个索引 - 或者是否有一个我更缺的更优雅的解决方案?
答案 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。
中查看所有内容