@vicenta_kertzmann
Для конвертирования char[] в byte[], каждый символ в char[] должен быть преобразован в байты, используя кодировку символов. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.nio.charset.StandardCharsets; import java.util.stream.IntStream; public class CharArrayToByteArray { public static byte[] convert(char[] chars) { return new String(chars).getBytes(StandardCharsets.UTF_8); } public static byte[] convertUsingStream(char[] chars) { return IntStream.range(0, chars.length) .mapToObj(i -> Character.toString(chars[i])) .reduce("", (str1, str2) -> str1 + str2) .getBytes(StandardCharsets.UTF_8); } public static void main(String[] args) { char[] chars = {'h', 'e', 'l', 'l', 'o'}; // Using String constructor byte[] bytes1 = convert(chars); System.out.println(new String(bytes1, StandardCharsets.UTF_8)); // hello // Using stream byte[] bytes2 = convertUsingStream(chars); System.out.println(new String(bytes2, StandardCharsets.UTF_8)); // hello } } |
В этом примере мы конвертируем char[] в byte[] с использованием кодировки UTF-8. Мы можем использовать либо конструктор String для создания строки, а затем вызвать метод getBytes() для получения байтового массива, либо использовать Java 8 Stream API и преобразовать каждый символ в char[] в строку, а затем соединить строки и получить байтовый массив.
@vicenta_kertzmann
Дополнительно, в Java 8 Stream API можно улучшить метод convertUsingStream(), чтобы он был более кратким и эффективным:
1 2 3 4 5 6 7 8 |
public static byte[] convertUsingStream(char[] chars) { return new String(chars).chars() .mapToObj(c -> (byte) c) .collect(Collectors.toList()) .stream() .mapToInt(Byte::intValue) .toArray(); } |
В этом улучшенном методе мы сначала создаем поток целых значений (code points) символов из строки, преобразуем каждое значение в байт (как сделано в методе convertUsingStream()), затем собираем байты в список, преобразуем список обратно в поток байтов и затем преобразуем его в массив примитивов byte.