1. 概述

在 Kotlin 开发中,将字符串转换为字节数组是一个非常常见的操作。本文将介绍如何使用 Kotlin 标准库中的方法实现字符串(String)到字节数组(byte array)的转换,同时也会涵盖如何仅转换字符串的一部分(子串),以及如何将字节数组还原为字符串。

文中所有示例代码均已验证通过,适用于 Kotlin JVM 项目环境。


2. 将字符串转换为字节数组

Kotlin 的 String 类提供了 toByteArray() 方法,用于将字符串转换为字节数组。默认使用 UTF-8 编码方式,当然你也可以显式指定其他字符集。

语法:

val byteArray = string.toByteArray(charset = Charsets.UTF_8)

示例代码

@Test
fun `should convert string to byte array`() {
    val string = "Hello world"
    val byteArray = string.toByteArray()
    assertThat(byteArray).isEqualTo(byteArrayOf(72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100))
}

⚠️ 注意: 字符编码很重要,不同编码方式下生成的字节数组可能不同。例如使用 Charsets.ISO_8859_1

val byteArray = string.toByteArray(Charsets.ISO_8859_1)

3. 将子串转换为字节数组

有时候我们只需要将字符串的一部分转换为字节数组,比如截取前几个字符。此时可以使用 encodeToByteArray() 方法。

方法签名:

fun String.encodeToByteArray(
    startIndex: Int = 0,
    endIndex: Int = length,
    throwOnInvalidSequence: Boolean = true
): ByteArray

示例代码:

@Test
fun `should convert substring to byte array`() {
    val string = "Hello world"
    val byteArray = string.encodeToByteArray(0, 5)
    assertThat(byteArray).isEqualTo(byteArrayOf(72, 101, 108, 108, 111))
}

这段代码只将字符串 "Hello world" 的前 5 个字符 "Hello" 转换为字节数组。


4. 将字节数组转换为字符串

将字节数组还原为字符串也很简单。Kotlin 提供了 String 构造函数来完成这个操作,默认使用 UTF-8 解码。

语法:

val string = String(byteArray)

示例代码:

@Test
fun `should convert byte array to string`() {
    val byteArray = byteArrayOf(72, 101, 108, 108, 111)
    val string = String(byteArray)
    assertThat(string).isEqualTo("Hello")
}

⚠️ 踩坑提醒: 如果字节数组是使用非 UTF-8 编码生成的,那么还原时也需要指定相同的字符集,否则可能出现乱码。

val string = String(byteArray, Charsets.ISO_8859_1)

5. 总结

本文介绍了在 Kotlin 中进行字符串与字节数组之间转换的常用方法:

操作 方法 说明
字符串转字节数组 toByteArray() 默认使用 UTF-8,可指定其他编码
子串转字节数组 encodeToByteArray() 可指定起始和结束索引
字节数组转字符串 String(byteArray) 默认 UTF-8 解码

这些方法在处理网络通信、文件读写、加密解密等场景中非常实用。

完整示例代码可在 GitHub 上找到。


原始标题:Convert a String to a Byte Array in Kotlin