【发布时间】:2018-06-16 07:05:52
【问题描述】:
在 Kotlin 中连接两个字节数组的最简单方法是什么?
考虑一下,
val x = ByteArray(a);
val y = ByteArray(b);
帮我连接两个字节数组x,y 并将其存储到另一个ByteArray?
【问题讨论】:
-
x + y 怎么样?
在 Kotlin 中连接两个字节数组的最简单方法是什么?
考虑一下,
val x = ByteArray(a);
val y = ByteArray(b);
帮我连接两个字节数组x,y 并将其存储到另一个ByteArray?
【问题讨论】:
ByteArray(和所有其他数组)有一个运算符函数 plus
operator fun ByteArray.plus(elements: ByteArray): ByteArray
Returns an array containing all elements of the original array and then all elements of the given elements array.
所以,您可以简单地将这个函数用作运算符:
val z ByteArray = x + y
还有重载版本:
operator fun ByteArray.plus(element: Byte): ByteArray
operator fun ByteArray.plus(elements: Collection<Byte>): ByteArray
详情请参考此文档: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/plus.html
顺便说一句,这个函数有很多重载版本,
例如,您可以加上一个(Iterable<T>、Collection<T> 或 Array<T>)和另一个(Iterable<T>、Collection<T>、Array<T> 或 Sequence<T>),然后得到一个 List<T> ,
或者你可以加上一个Set<T>和另一个(Array<out T>、Iterable<T>或Sequence<T>),然后得到一个Set<T>
所有这些重载版本都是操作符函数,这意味着你可以像listA + arrayB一样使用它
a + b 运算符将调用运算符函数a.plus(b)
详情请参考此文档: https://kotlinlang.org/docs/reference/operator-overloading.html
【讨论】:
fun main(args: Array<String>) {
val x = ByteArray(a);
val y = ByteArray(b);
val xLen = x.size
val yLen = y.size
val result = ByteArray(xLen + yLen)
System.arraycopy(x, 0, result, 0, xLen)
System.arraycopy(y, 0, result, xLen, yLen)
// so now result is array that concatenate two byte arrays x,y
}
希望对你有帮助
【讨论】: