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 上找到。