Тип ByteArray
Тип ByteArray представляет собой массив примитивных значений типа Byte.
Это эффективная структура данных для работы с бинарными данными, файлами,
сетевыми пакетами и другими низкоуровневыми операциями.
Размер массива фиксирован при создании и не может быть изменен.
Создание ByteArray
// Создание массива заданного размера (заполняется нулями)
val byteArray1 = ByteArray(5)
// Создание массива с помощью фабричной функции
val byteArray2 = byteArrayOf(1, 2, 3, 4, 5)
// Создание массива с инициализацией через лямбду
val byteArray3 = ByteArray(3) { index -> (index * 10).toByte() }
Доступ к элементам
Доступ к элементам массива осуществляется через оператор []
или методы get и set:
val bytes = byteArrayOf(10, 20, 30, 40, 50)
// Получение элемента по индексу
val firstElement = bytes[0]
val secondElement = bytes.get(1)
// Установка элемента по индексу
bytes[2] = 35
bytes.set(3, 45)
println("Array: ${bytes.contentToString()}")
Результат выполнения кода:
Array: [10, 20, 35, 45, 50]
Свойства и основные методы
val bytes = byteArrayOf(5, 10, 15, 20, 25)
// Получение размера массива
val size = bytes.size
// Получение первого и последнего элемента
val first = bytes.first()
val last = bytes.last()
// Проверка на пустоту
val isEmpty = bytes.isEmpty()
val isNotEmpty = bytes.isNotEmpty()
println("Size: $size, First: $first, Last: $last")
println("Is empty: $isEmpty, Is not empty: $isNotEmpty")
Результат выполнения кода:
Size: 5, First: 5, Last: 25
Is empty: false, Is not empty: true
Итерация по массиву
val bytes = byteArrayOf(1, 2, 3, 4, 5)
// Итерация с помощью for
for (byte in bytes) {
println("Byte: $byte")
}
// Итерация с помощью forEach
bytes.forEach { byte ->
println("Element: $byte")
}
// Итерация с индексом
for (index in bytes.indices) {
println("Index: $index, Value: ${bytes[index]}")
}
Преобразование в другие типы
val bytes = byteArrayOf(72, 101, 108, 108, 111) // ASCII коды для "Hello"
// Преобразование в строку
val str = String(bytes)
println("String: $str")
// Преобразование в список
val list = bytes.toList()
println("List: $list")
// Преобразование в множество
val set = bytes.toSet()
println("Set: $set")
Результат выполнения кода:
String: Hello
List: [72, 101, 108, 108, 111]
Set: [72, 101, 108, 111]
Поиск и фильтрация
val bytes = byteArrayOf(10, 20, 30, 40, 50, 20, 10)
// Поиск первого вхождения
val first20 = bytes.indexOf(20)
val last10 = bytes.lastIndexOf(10)
// Поиск элемента по условию
val firstGreater25 = bytes.find { it > 25 }
val allGreater15 = bytes.filter { it > 15 }
println("First 20 at index: $first20")
println("Last 10 at index: $last10")
println("First greater than 25: $firstGreater25")
println("All greater than 15: $allGreater15")
Результат выполнения кода:
First 20 at index: 1
Last 10 at index: 6
First greater than 25: 30
All greater than 15: [20, 30, 40, 50, 20]
Копирование и преобразование
val original = byteArrayOf(1, 2, 3, 4, 5)
// Копирование массива
val copy = original.copyOf()
// Копирование части массива
val partialCopy = original.copyOfRange(1, 4)
// Преобразование с помощью map
val doubled = original.map { it * 2 }.toByteArray()
println("Original: ${original.contentToString()}")
println("Copy: ${copy.contentToString()}")
println("Partial copy: ${partialCopy.contentToString()}")
println("Doubled: ${doubled.contentToString()}")
Результат выполнения кода:
Original: [1, 2, 3, 4, 5]
Copy: [1, 2, 3, 4, 5]
Partial copy: [2, 3, 4]
Doubled: [2, 4, 6, 8, 10]
Сортировка
val bytes = byteArrayOf(5, 3, 8, 1, 2)
// Сортировка исходного массива
bytes.sort()
println("Sorted: ${bytes.contentToString()}")
// Сортировка в обратном порядке
bytes.sortDescending()
println("Descending: ${bytes.contentToString()}")
Результат выполнения кода:
Sorted: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]