Преобразование char[] в Byte[]
Я хотел бы преобразовать массив символов в массив байтов в Java. Какие существуют методы для этого преобразования?
6 ответов:
char[] ch = ? new String(ch).getBytes();
или
new String(ch).getBytes("UTF-8");
чтобы получить кодировку не по умолчанию.
обновление: Начиная С Java 7:
new String(ch).getBytes(StandardCharsets.UTF_8);
Edit: ответ Андрея был обновлен, поэтому следующее больше не применяется.
ответ Андрея (самый высокий голос на момент написания статьи) немного неправильный. Я бы добавил Это как комментарий, но я не являюсь достаточно надежным.
в ответе Андрея:
char[] chars = {'c', 'h', 'a', 'r', 's'} byte[] bytes = Charset.forName("UTF-8").encode(CharBuffer.wrap(chars)).array();
вызов array () может не возвращать желаемое значение, например:
char[] c = "aaaaaaaaaa".toCharArray(); System.out.println(Arrays.toString(Charset.forName("UTF-8").encode(CharBuffer.wrap(c)).array()));
выход:
[97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0]
как видно, был добавлен нулевой байт. Избегать при этом используется следующее:
char[] c = "aaaaaaaaaa".toCharArray(); ByteBuffer bb = Charset.forName("UTF-8").encode(CharBuffer.wrap(c)); byte[] b = new byte[bb.remaining()]; bb.get(b); System.out.println(Arrays.toString(b));
выход:
[97, 97, 97, 97, 97, 97, 97, 97, 97, 97]
как ответ также намекал на использование паролей это может стоить гашение массива, который поддерживает ByteBuffer (доступ через массив (функция)):
ByteBuffer bb = Charset.forName("UTF-8").encode(CharBuffer.wrap(c)); byte[] b = new byte[bb.remaining()]; bb.get(b); blankOutByteArray(bb.array()); System.out.println(Arrays.toString(b));
private static byte[] charArrayToByteArray(char[] c_array) { byte[] b_array = new byte[c_array.length]; for(int i= 0; i < c_array.length; i++) { b_array[i] = (byte)(0xFF & (int)c_array[i]); } return b_array; }