1. Overview
In this tutorial, we’ll discuss how to convert a String to a byte array in Kotlin. Additionally, we’ll see how to convert a substring to the byte array. Finally, we’ll describe the opposite conversion, from the byte array to the String object.
2. Convert String to byte Array
The conversion from a String to a byte array is an everyday use case in programming languages. The Kotlin language provides a straightforward solution for this case.
The String class provides a toByteArray() method. It converts the String object to a byte array object. Moreover, it converts the object using the UTF-8 Charset. It’s possible to set the charset by providing a parameter to the toByteArray() method.
Let’s see it with an example:
@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))
}
As a result, every character has its representation in the byte array.
Similarly, we can convert the String with a defined charset:
val byteArray = string.toByteArray(Charsets.ISO_8859_1)
3. Convert Substring to byte Array
Now, let’s have a look at how to convert a part of the String to a byte array. Similarly, there’s a dedicated method in the String class. The class provides an encodeToByteArray() method. It converts a String to a byte array as well. Moreover, the encodeToByteArray() method internally calls the toByteArray() method with charset UTF-8 as a parameter.
Additionally, the String class exposes an overloaded encodeToByteArray() method with three parameters:
- startIndex – the beginning position of a substring, included
- endIndex – the last position of a substring, not included
- throwOnInvalidSequence – specifies if we want it to throw an exception on a malformed char sequence
The startIndex parameter equals zero, by default. On the other hand, the endIndex parameter equals the length of the String.
Let’s look at an example:
@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))
}
Here, we converted only the “Hello” word to the byte array.
4. Convert byte Array to String
After that, let’s have a look at how to do a conversion from the byte array to the String object. Again, the String class has built-in functionality to handle it:
@Test
fun `should convert byte array to string`() {
val byteArray = byteArrayOf(72, 101, 108, 108, 111)
val string = String(byteArray)
assertThat(string).isEqualTo("Hello")
}
Here, the constructor converts an array of bytes to characters and returns them combined as a String. The conversion uses the UTF-8 charset for decoding.
5. Conclusion
In this short article, we discussed the String conversion to a byte array. We saw how to convert the whole String as well as its substring. Finally, we learned how to convert a byte array to a String object.
As always, the source code of the examples is available over on GitHub.