【问题标题】:Easy way to concatenate two byte arrays in kotlin?在kotlin中连接两个字节数组的简单方法?
【发布时间】:2018-06-16 07:05:52
【问题描述】:

在 Kotlin 中连接两个字节数组的最简单方法是什么?

考虑一下,

val x = ByteArray(a);
val y = ByteArray(b);

帮我连接两个字节数组x,y 并将其存储到另一个ByteArray

【问题讨论】:

  • x + y 怎么样?

标签: android arrays kotlin


【解决方案1】:

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&lt;T&gt;Collection&lt;T&gt;Array&lt;T&gt;)和另一个(Iterable&lt;T&gt;Collection&lt;T&gt;Array&lt;T&gt;Sequence&lt;T&gt;),然后得到一个 List&lt;T&gt; ,

或者你可以加上一个Set&lt;T&gt;和另一个(Array&lt;out T&gt;Iterable&lt;T&gt;Sequence&lt;T&gt;),然后得到一个Set&lt;T&gt;

所有这些重载版本都是操作符函数,这意味着你可以像listA + arrayB一样使用它

a + b 运算符将调用运算符函数a.plus(b)

详情请参考此文档: https://kotlinlang.org/docs/reference/operator-overloading.html

【讨论】:

  • 不是串联操作。它是字节数组的总和。不应将其标记为最佳答案。
  • @Nihilus13 有什么区别?
【解决方案2】:
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
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多