Преобразование массива байт в строку и обратно в Android

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования массива байтов в строку используйте следующий код:

Java
Скопировать код
byte[] bytes = {72, 101, 108, 108, 111}; // "Hello"
String str = new String(bytes, StandardCharsets.UTF_8);

А для преобразования строки в массив байтов, примените следующий код:

Java
Скопировать код
String str = "Привет";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);

Использование StandardCharsets.UTF_8 гарантирует, что вы не столкнётесь с исключениями типа UnsupportedEncodingException.

Кинга Идем в IT: пошаговый план для смены профессии

Почему важна кодировка

Кодировка определяет способ представления символов в виде байтов. UTF-8 — это популярная кодировка, поддерживаемая стандартными кодировками Java. Однако выбор неправильной кодировки может привести к проблемам.

Отрицательные значения в байтах

Тип Byte в Java имеет знак, значит он может принимать отрицательные значения. Отрицательные значения байтов могут привести к появлению неожиданных символов в строке, поэтому избегайте их по возможности!

Кодировка по умолчанию: опасный момент

Если вы не указываете кодировку явно, Java будет использовать системную кодировку по умолчанию. Это может быть удобно, однако делает ваш код неустойчивым к изменениям языка или локали системы. Всегда укажите StandardCharsets.UTF_8 вручную для получения стабильных результатов.

Визуализация

Вот как изображается процесс кодирования и декодирования данных:

Markdown
Скопировать код
Массив байтов (🔒): [01000001, 01000010, 01000011]
Строка (🔓): "ABC"

Кодирование — это процесс преобразования текста в массив байтов:

Java
Скопировать код
String message = "ABC";
byte[] bytes = message.getBytes(StandardCharsets.UTF_8);
// 🔓 -> 🔒: "ABC" -> зашифрованные байты

Декодирование — это обратный процесс превращения массива байтов обратно в текст:

Java
Скопировать код
byte[] bytes = new byte[]{65, 66, 67};
String message = new String(bytes, StandardCharsets.UTF_8);
// 🔒 -> 🔓: зашифрованные байты -> "ABC"

Распространённые случаи преобразования

Base64 — надежный выбор!

Когда речь идет о двоичных данных, эффективнее всего использовать Base64 для кодирования и декодирования byte[] в String.

Сохраняйте согласованность кодировок

Всегда убедитесь, что вы используете одинаковые кодировки при кодировании и декодировании. Это предотвратит появление неожиданных результатов.

Минусы стандартной системной кодировки

Системная кодировка по умолчанию может быть не UTF-8, особенно в старых версиях Java или в определённых средах. Во избежание проблем всегда лучше использовать StandardCharsets.UTF_8.

Улучшение процесса преобразования

Экспериментируйте с различными кодировками

Тестируйте разные кодировки, чтобы найти самую эффективную для ваших нужд.

Потери при кодировании

При кодировании некоторые символы могут быть заменены на заполнители, например, на вопросительные знаки. Обратите на это внимание и проверяйте результаты.

Полезные материалы

  1. Charset (Java SE 11 & JDK 11) — документация Java, описывающая кодировки символов.
  2. java – Как преобразовать массив байтов в строку и обратно? – Stack Overflow — подборка лучших практик от сообщества разработчиков.
  3. Unicode – World Standard for Text and Emoji — детальное описание стандартов UTF-8 и Unicode.
  4. Codec – Apache Commons Codec — утилита для кодирования/декодирования, не требующая отдельного декодера.
  5. Java Program to Convert String to Byte Array Using getBytes() Method – GeeksforGeeks — подробное руководство по преобразованию строк в массивы байтов и наоборот.
Свежие материалы