如何以最少额外对象开销从ByteArray指定区间创建kotlin.String?
Kotlin中高效基于ByteArray片段创建String(最少额外对象)
Java中使用new String(byte[], int, int)构造String时,会额外复制一份指定范围的字节到新数组中,带来不必要的对象开销。在Kotlin里,要以最少额外对象的方式完成相同操作,直接复用Java的String构造方法即可——Kotlin可以无缝调用Java标准库API,这是当前最优的无多余中间对象的实现方式:
val bytes: ByteArray = ... val pos: Int = ... val length: Int = ... val result = String(bytes, pos, length)
补充说明
- 如果需要指定字符集,可调用带
Charset参数的重载:val result = String(bytes, pos, length, Charsets.UTF_8) - 避免使用
bytes.sliceArray(pos until pos + length).let { String(it) }这类写法,因为sliceArray会先创建新的ByteArray副本,反而增加额外对象开销,不符合“最少额外对象”的要求。
内容的提问来源于stack exchange,提问作者mstrap
相关产品推荐
相关产品推荐

